【模拟合集】

用来记录那些岁月中模拟的题目,真是cd啊

文章目录

        • 1.2020年“远光杯”粤澳计算机程序设计大赛网络资格赛 A--Alice的秘密
        • 2.UPC-2020年春混合个人训练 4.26日场 G-背菜谱

1.2020年“远光杯”粤澳计算机程序设计大赛网络资格赛 A–Alice的秘密

时间限制:1 S,内存限制:32 MB
题目描述
Alice有一些重要信息,这信息只包括大写字母、小写字母和空格。她想要对这些信息进行记录,但是又不想直接记录原始信息。

她开始查找资料,其中一种方法是将字母进行变换,设定一个变换位置k,则c=k+m,其中m为原始字符,c为变换结果。比如k=2,则A变为C,Y变为A,z变为b。空格转换为’#’。

Alice对k值的设置方法进行了一些改进,由原来固定的k值改进为使用记录的日期变换出k值。具体方法是对日期构成的每一位求和,直到k小于10。比如20020308,对日期构成的每一位求和得到k=2+2+3+8=15,继续求和k=1+5=6,则最终得到k=6。请你帮Alice编写一个程序,利用记录日期将信息转换为加密编码格式。

这个算法要求日期的格式为:yyyymmdd,年份范围应为[1900-2020],月份范围应为[1-12],日根据年和月确定;信息只能是大写字母、小写字母和空格。
输入
多组输入。
每组数据包括2行。第1行是一个日期,长度不大于8;第2行是要加密的信息,长度不大于128。
输出
每组数据输出如下:
如果输入的日期或信息不符合要求,输出 none
否则,输出加密后的信息。
样例输入
20201206
I wrote a program to get a grade A
1234
GMCPC
样例输出
M#avsxi#e#tvskveq#xs#kix#e#kvehi#E
none
模拟源:

#include
using namespace std;
#include
const int maxn = 1e6+7;
map<string,int>mp;
int a[maxn];
int b[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int main(){string s,s1;while(getline(cin,s)){int flag=1;memset(a,0,sizeof a);getline(cin,s1);if(s.size()!=8) flag=0;for(int i=0;i<s1.size();i++){if(s1[i]>='a'&&s1[i]<='z'||s1[i]>='A'&&s1[i]<='Z'||s1[i]==' ') continue;else {flag=0;break;}}for(int i=0;i<s.size();i++){a[i]=s[i]-'0';}int y=a[0]*1000+a[1]*100+a[2]*10+a[3],m=a[4]*10+a[5],d=a[6]*10+a[7];if(y%4==0&&y%100!=0||y%400==0) b[2]=29;else b[2]=28;if(y<1900||y>2020||m<1||m>12||d<1||d>b[m]) flag=0;///else flag=0;if(flag){int sum=0;for(int i=0;i<8;i++) sum+=a[i];while(sum>=10){int sum1=0;while(sum/10){sum1+=sum%10;sum/=10;}sum1+=sum;sum=sum1;}for(int i=0;i<s1.size();i++){int sum2=sum;if(s1[i]==' ') s1[i]='#';else if(s1[i]>='a'&&s1[i]<='z'){if(sum2+s1[i]>'z'){sum2=sum2-('z'-s1[i]);if(sum2%26==0) s1[i]='z';else s1[i]='a'+sum2%26-1;}else s1[i]+=sum;}else if(s1[i]>='A'&&s1[i]<='Z'){if(sum2+s1[i]>'Z'){sum2=sum2-('Z'-s1[i]);if(sum2%26==0) s1[i]='Z';else s1[i]='A'+sum2%26-1;}else s1[i]+=sum2;}}}if(!flag) cout << "none" << endl;else cout << s1 << endl;}return 0;
}
2.UPC-2020年春混合个人训练 4.26日场 G-背菜谱

时间限制: 1 Sec 内存限制: 128 MB
问题描述
扬州是中国四大菜系之一的淮扬菜系的发源地。中午,跑男们来到扬州菜根香饭店,这是家很有名的老字号,有着正宗的淮扬菜。狮子头不松不紧、蟹粉味很浓,扬州炒饭配料丰富,米粒颗颗饱满,煮干丝入口即化、汤头也很鲜……
不过吃饭前,他们还必须完成一项比赛——背菜谱,每人都有一本饭店的菜谱,在规定的时间看谁记住的菜名多。Angelababy发现菜谱中有的菜名字多一些,有的字少一些,多的菜名难背一点,少的菜名好背一点,根据Angelababy的经验,她能一眼看出背一个菜名需要的时间,以分钟记。
开始背菜谱的时间是yyyy年mm月dd日hh时min分,开始测试的时间是yyyy’年mm’月dd’日hh’时min’分。那么测试之前她最多能背多少个菜名呢?
输入
第一行一个整数n,表示字典中的单词数,n≤5000。
接下来n行,每行一个整数表示背这个单词需要用的时间,以分钟记,小于等于10000。
接下来两行依次是开始背菜谱的时间和开始测试时间。
输出
输出共一行,包含一个整数,测试前最多能背出的菜名数。
样例输入
2
1
1
2007-06-23-11:59
2007-06-23-12:00
样例输出
1
提示
对于100%的数据,1≤n≤5000。
时间给出的格式是:yyyy-mm-dd-hh:min,例如:2007-06-23-02:00,采用24小时制,每天从00:00~23:59,年份从0000到9999。
模拟源:

#include
#include
#include
#include
#include
using namespace std;
typedef long long ll;
const int maxn = 1e6+7;
typedef pair<ll,ll> PII;
PII q[maxn];
int n,flag;
char s1[maxn],s2[maxn];
int a[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int b[maxn];
int main(){int ans;scanf("%d",&n);for(int i=1;i<=n;i++) cin >> b[i];sort(b+1,b+1+n);cin >> s1 >> s2;int flag1=((s1[11]-'0')*10+(s1[12]-'0'))*60+(s1[14]-'0')*10+(s1[15]-'0');int flag2=((s2[11]-'0')*10+(s2[12]-'0'))*60+(s2[14]-'0')*10+(s2[15]-'0');flag=flag2-flag1;///cout << flag << endl;flag1=(s1[0]-'0')*1000+(s1[1]-'0')*100+(s1[2]-'0')*10+s1[3]-'0';flag2=(s2[0]-'0')*1000+(s2[1]-'0')*100+(s2[2]-'0')*10+s2[3]-'0';if(flag1==flag2){if(flag1%4==0&&flag1%100!=0||flag1%400==0) a[2]=29;else a[2]=28;int flag3=(s1[5]-'0')*10+(s1[6]-'0');int flag4=(s2[5]-'0')*10+(s2[6]-'0');if(flag3==flag4){ans=((s2[8]-'0')*10+(s2[9]-'0')-(s1[8]-'0')*10-(s1[9]-'0'))*60*24+flag;}else{int ans1=a[flag3]-(s1[8]-'0')*10-(s1[9]-'0');for(int i=(s1[5]-'0')*10+(s1[6]-'0')+1;i<(s2[5]-'0')*10+(s2[6]-'0');i++) ans1+=a[i];ans=(ans1+(s2[8]-'0')*10+(s2[9]-'0'))*24*60+flag;}///cout << ans << endl;}else{if(flag1%4==0&&flag1%100!=0||flag1%400==0) a[2]=29;else a[2]=28;int flag3=(s1[5]-'0')*10+(s1[6]-'0');int flag4=(s2[5]-'0')*10+(s2[6]-'0');int ans1=a[flag3]-(s1[8]-'0')*10-(s1[9]-'0');for(int i=(s1[5]-'0')*10+(s1[6]-'0')+1;i<=12;i++) ans1+=a[i];for(int i=flag1+1;i<flag2;i++){if(i%4==0&&i%100!=0||i%400==0) ans1+=366;else ans1+=365;}for(int i=1;i<(s2[5]-'0')*10+(s2[6]-'0');i++) ans1+=a[i];ans=(ans1+(s2[8]-'0')*10+(s2[9]-'0'))*24*60+flag;}int sum=0;for(int i=1;i<=n;i++){sum+=b[i];if(ans<sum){cout << i-1;break;}if(i==n) cout << n;}return 0;
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部