欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

题解 洛谷 P1580 【yyy loves Easter_Egg I】

程序员文章站 2022-04-15 17:27:57
一言不合上代码: 其实这道题并没有多难,只是许多坑罢了,要注意 (本人早期作品,勿喷) ......

一言不合上代码:

#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;
}

其实这道题并没有多难,只是许多坑罢了,要注意

(本人早期作品,勿喷)