2020 CodeJam Round 1A

前言

第一道题的第二个低保都没吃到手,第二道题也就吃了两个低保,太菜了。最后的测试点看起来不是思维就是暴力,都不想写了,算了,没资格就没资格吧,来年再战

比赛链接

A Pattern Matching

在这里插入图片描述

//只吃到一个低保,第二个点写了好久写崩了,不想改了
#include <iostream>
#include <string>
using namespace std;
int t,n;
string buf[55];

int main()
{
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int kase=0;
    cin>>t;
    while(t--){
        cin>>n;
        int sz=-1;
        string str,cur;
        for(int i=1;i<=n;i++){
            cin>>str;
            int now=str.size();
            string res="";
            for(int j=now-1;j>=0;j--){
                res+=str[j];
            }
            buf[i]=res;
            if(now>sz){
                cur=res;
                sz=now;
            }
        }
        //cout<<cur<<endl;
        int flag=0;
        for(int i=1;i<=n;i++){
            if(flag) break;
            if(buf[i].size()<sz){
                for(int j=buf[i].size()-1;j<sz;j++)
                    buf[i]+='*';
            }
            for(int k=0;k<sz;k++){
                if(buf[i][k]!=cur[k] && buf[i][k]!='*' && cur[k]!='*'){
                    flag=1;
                    break;
                }
            }
        }
        cout<<"Case #"<<++kase<<": ";
        if(flag) cout<<"*"<<endl;
        else{
            for(int i=sz-1;i>=0;i--)
                if(cur[i]!='*') cout<<cur[i];
            cout<<endl;
        }
    }
    return 0;
}
B Pascal Walk

在这里插入图片描述
1.对于杨辉三角,首先当n较小时,第i行的第二个数为i-1,那么我们一直取一半的1,后面直接跳到第二列。对于奇数,加一除以二求得mid;偶数直接除以二,然后奇数是直接跳到当前行的第二列,偶数是跳到下一行的第二列

2.当n<=998时,上面的规律输出了499个数。因此对999和1000要特判,我们只在中间多跳一次即可,当输出499个数时得到的结果为996,想办法加上3或者加上4即可

//吃低保得永生 
#include <iostream>
using namespace std;
int t,n,kase=0;

int main()
{
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    cin>>t;
    while(t--){
        cin>>n;
        cout<<"Case #"<<++kase<<":"<<endl;
        if(n==1){
            cout<<"1 1"<<endl;
        }else if(n>1 && n<=998){
            if(n&1){
                int mid=(n+1)/2;
                for(int i=1;i<=mid;i++) cout<<i<<" 1"<<endl;
                cout<<mid<<" 2"<<endl;
            }else{
                int mid=n/2;
                for(int i=1;i<=mid;i++) cout<<i<<" 1"<<endl;
                cout<<mid+1<<" 2"<<endl;
            }
        }else if(n==999){       //498*2 = 996 + 3=999    ---498+1+1=500´Î
            cout<<"1 1"<<endl;
            cout<<"2 1"<<endl;
            cout<<"3 1"<<endl;
            cout<<"4 2"<<endl;
            for(int i=4;i<=498;i++) cout<<i<<" 1"<<endl;
            cout<<499<<" 2"<<endl;
        }else if(n==1000){      //498*2= 996 + 4=1000    ---498+1+1=500´Î
            cout<<"1 1"<<endl;
            cout<<"2 1"<<endl;
            cout<<"3 1"<<endl;
            cout<<"4 1"<<endl;
            cout<<"5 2"<<endl;
            for(int i=5;i<=498;i++) cout<<i<<" 1"<<endl;
            cout<<499<<" 2"<<endl;
        }
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值