虽然离比赛结束还有3分钟,不过用了两小时17分钟来写第一题,第二题分数翻倍,估计也是写不完了。
首先第一题的题目是:
https://agc022.contest.atcoder.jp/tasks/agc022_a
代码为:
#include<stdio.h> #include<string.h> int main() { char a[30]; char b[30]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}; scanf("%s",a); int len=strlen(a); int i,j,flag=0; if(len!=26) //字符串长度小于26时,多输出一位字符即可 { for(i=0;i<len;i++) { for(j=0;j<26;j++) if(b[j]==a[i]) { b[j]=0; break; } } for(i=0;i<26;i++) { if(b[i]!=0) break; } a[len]=b[i]; a[len+1]='\0'; } else { for(i=len-2;i>=0;i--) { for(j=i+1;j<len;j++) { if(a[i]<a[j] && i==24) //为配合else if中的语句,所以添加了这个条件 { a[i]=a[j]; a[j]='\0'; flag=1; break; } else if(a[i]<a[j] && i!=24) { char k=a[j]; for(j=j+1;j<len;j++) //取最小字符 if(k>a[j] && a[j]>a[i]) //还要保证字符大于此字符 k=a[j]; a[i]=k; a[i+1]='\0'; flag=1; break; } } if(flag) break; if(i==0) { a[0]='-'; a[1]='1'; a[2]='\0'; } } } printf("%s\n",a); return 0; }
不多说了,我注释的地方全都是一开始没有考虑到的地方。
考虑问题的解法用了不少时间,完善细节又用了不少时间。
一个是题目做的太少了,另外一个是数学知识储备太少,分析问题的能力较差。。。。。。
acm落后了啊