Codeforces Round #135 (Div. 2)

来源:互联网 发布:vscode npm run dev 编辑:程序博客网 时间:2024/06/05 09:55

A题:水题,可惜一开始犯糊涂,结果30min才做出来-.-统计下字母出现次数,重新排列,ok

int main(){    int N,flag[27];    char A[1005],B[1005];    while(~scanf("%d",&N)){        scanf("%s",A);        memset(flag,0,sizeof(flag));        int len=strlen(A);        for(int i=0;i<len;i++){            flag[A[i]-'a']++;        }        int i=0;     //   printf("%d %d\n",i,flag[i]);        for(i=0;i<26;i++){            if(flag[i]){                if(flag[i]%N!=0)    break;            }        }        if(i!=26) printf("-1\n");        else        {            for(i=0;i<N;i++){                for(int j=0;j<26;j++)                    if(flag[j]){                        for(int m=0;m<flag[j]/N;m++)                        printf("%c",j+'a');                    }            }            printf("\n");        }    }}

B题,求p->p-d之间末尾9最多的数,,,,当时用暴力的直接在p~p-d之间的9,,,结果TLE,,,,T_T看了下DS神的代码,,,真是捶胸啊.

我太弱了恨不得撞墙

/*Problem ID:CF135DIV2Bmeaning:求末尾9的最多p-d~pAnalyzing:模拟,暴力会超时*/#include <iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<vector>using namespace std;typedef struct even{int y1,y2,x;}even;#define FOR(i,s,t) for(int i=(s); i<(t); i++)#define LL long long#define BUG puts("here!!!")#define STOP system("pause")#define file_r(x) freopen(x, "r", stdin)#define file_w(x) freopen(x, "w", stdout)const int maxn=500005;int main(){    LL tail,front,base,cur,ans;    LL  p,d;    while(~scanf("%I64d%I64d",&p,&d)){        front=0;        ans=p;        for(int i=0;i<18;i++){            tail=0;            base=1;            for(int j=0;j<i;j++){                tail=tail*10+9;                base*=10;            }            front=p/base;            if(p%base<tail) front--;            cur=front*base+tail;            if(cur>=p-d) ans=cur;        }        printf("%I64d\n",ans);    }    return 0;}




C题.比赛时没有考虑k==2的特殊情况,水过去了.哎,还好的是没被cha,如果这也算幸运的话.k==2,,怎么处理?看了下学号哥的代码.真是赞,可以记录下A在奇数位和B在偶数位的数量和相反的数量最后结果就是按照大的来!!!

/*Problem ID:CF135Cmeaning:Analyzing:*/#include <iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<vector>using namespace std;typedef struct even{int y1,y2,x;}even;#define FOR(i,s,t) for(int i=(s); i<(t); i++)#define LL long long#define BUG puts("here!!!")#define STOP system("pause")#define file_r(x) freopen(x, "r", stdin)#define file_w(x) freopen(x, "w", stdout)const int maxn=500005;int main(){    int n,k;    char a[maxn];    int num,j=0;    while(~scanf("%d%d",&n,&k)){        scanf("%s",a);        num=0;        int cnt1=0,cnt2=0;        if(k==2){           for(int i=0;i<n;i++){            if(i&1){                if(a[i]=='A') cnt1++;            }            else {                if(a[i]=='B') cnt1++;            }           }           for(int i=0;i<n;i++){               if(i&1){                   if(a[i]=='B') cnt2++;               }               else {                   if(a[i]=='A') cnt2++;               }           }        if(cnt1>cnt2){//A在奇数位上的次数比较多            printf("%d\n",cnt2);            for(int i=0;i<n;i++){                if(i&1) putchar('A');                else putchar('B');            }        }        else {//A在偶数位上的次数比较多            printf("%d\n",cnt1);            for(int i=0;i<n;i++){                if(i&1) putchar('B');                else putchar('A');            }        }        puts("");        }        else {        for(int i=1;i<n;i++){            j=0;            if(a[i]!=a[i-1]) continue;            else if(a[i]==a[i-1]){                while(1){                    a[i]=j+'A';                    if(a[i]!=a[i-1]&&a[i]!=a[i+1]) break;                    j++;                }                num++;            }        }        printf("%d\n",num);        printf("%s\n",a);        }    }    return 0;}










原创粉丝点击