一言不合上代码:
#include<cstdio> #include<cstring> char s[100001],bz[100001],dmz[100001]; int maohao,xf,ls,sss,lll,xxf,xxxf; int n,d,a[1000001],i,j,k,f,cjf,l; int main() { ls=1; gets(s);//第一个要特殊输入,以便寻找队列要@的人 l=strlen(s); if(s[l-1]=='/r')s[l-1]=' '; for(i=10; i<l; i++) { if(f) { k=0; for(j=i; j<l; j++) {//记录人名 if(s[j]==' ')xxf++; if(xxf==3||s[j]==13)break;//特判符 bz[lll]=s[j]; lll++; } break; } if(s[i]=='@')f=1; } while(gets(s)) {//输到没有为止 l=strlen(s); if(l<2)break;//以防结尾回车 if(s[l-1]=='/r')s[l-1]=' '; ls++; if(cjf==0&&xf==0) { xxxf=0; char mz[100001]="yyy loves "; sss=10; j=0; f=0; l=strlen(s); for(i=0; i<l; i++) { if(s[i+1]==':') { maohao=i; break; } if(s[i]==bz[j])j++; mz[i]=s[i]; sss++; } if(j==lll) {//油炸成功 cjf=1; continue; } for(i=maohao+1; i<l; i++) { if(f) { k=0; for(j=i; j<l; j++) { if(s[j]==bz[k])k++; else break; } if(k!=lll)xf=ls;//队列被破坏 break; } if(s[i]=='@')f=1; } if(f==0)xf=ls; for(i=0; i<sss; i++)//录下当前说话的人的人名 dmz[i]=mz[i]; for(i=0; i<l; i++)if(s[i]=='@')xxxf++; if(xxxf>1) {//判断@个数 xf=ls; break; } } } if(cjf)printf("Successful @%s attempt",bz);//输出 else if(xf) { printf("Unsuccessful @%s attempt\n",bz); printf("%d\n",xf); puts(dmz); } else { printf("Unsuccessful @%s attempt\n",bz); printf("%d\n",ls); puts("Good Queue Shape"); } return 0; }
其实这道题并没有多难,只是许多坑罢了,要注意
(本人早期作品,勿喷)