【模拟合集】

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

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<bits/stdc++.h>
using namespace std;
#include<map>
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<bits/stdc++.h>
#include<vector>
#include<algorithm>
#include<queue>
#include<map>
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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值