【Luogu P1580】yyy loves Easter_Egg I

题目大意:

1455.png

yyy loves OI(Huntfire),yyy loves Maths(redbag),yyy loves Chemistry(absi2011)对yyy loves Physics(soha)进行轮番炸,轰炸按照顺序进行,顺序为Huntfire,redbag,absi2011。

现在这一题中吗,我们不考虑太复杂的队形形式。我们认为只要这一句内含有且恰好含有一次@,@的人和上一句话一样就算为队形。

比如以下也视为队形

yyy loves OI : @yyy loves Microelectronic

yyy loves Maths : @yyy loves Microelectronic 我佩服soha的出题效率

yyy loves OI : @yyy loves Microelectronic +1

yyy loves Chemistry : +1 @yyy loves Microelectronic

若艾特的人与第一个人不同,就算队形被打破。若这个人在队形被打破之前出来吱声了,或者就是他打破队形了,就算(油)炸成功了。若(油)炸成功,输出“Successful @某某某 attempt”,若队形被破坏先输出“Unsuccessful @某某某 attempt”,再输出队形第一次被破坏的行数与第一次破坏队形的人的id。如果队形一直没被打破,就先输出“Unsuccessful @某某某 attempt”,再输出队形的长度,最后输出"Good Queue Shape"


求各位神犇点赞


首先介绍一下函数:

string search(string s,int l){
    string kk;
    int spacesum=0;
    for(register int i=l;s[i]!=' '&&i<s.size();i++){
        if(s[i]==' ') spacesum++;
        if(spacesum==3||s[i]==13) break;
        kk+=s[i];
    }
    return kk;
}

search函数:找到l位置以后的名字(yyy loves____)

返回一个名字,原理不多说

注意如果发现第二个点WA且有以下这种操作:

On line 1 column 35, read
att, expected atte. 得分0

那你一定就是没有特判换行符了!!!
---
没错,就是spacesum那玩意儿

再次膜拜一下讨论区里的@treasure 大佬

string find_name(string s){
    string a=search(s,10);
    return a;
}

find_name函数:寻找发消息的人的名字(同上)

其实就是调用search函数,利用名字一定是yyy loves XXX

int kkk(string q){
    int sum=0,gg;
    for(register int i=0;i<q.size();i++){
        if(q[i]=='@'){sum++;gg=i;}
    }
    if(sum!=1)return 0;
    else return gg;
}

kkk函数:(逃

原理:扫一遍寻找一句话中@的个数

以及@的位置(方便search)

如@的个数不为1则返回0,否则返回@的位置

string wss(string s){
    int g=kkk(s);
    if(g!=0)return search(s,g+11);
    else return "tenyearsatreehundredyearsatreeman";
}

wss函数:

原理:调用kkk函数,搜索被@的人的名字;

若@的人数不为1个,直接返回一段乱码(逃

然后就是主程序:

不停输入,判断空行(保证文件结束一定有一行空行 方便你判定文件结束)

如果跳出来的人(find_name(a))和@的人一样,炸成功,直接结束

否则如果被@的人(wss(a))与第一个人@的人不一样(包括不@或@了多人),破坏队形,返回

如果输入结束,没有停止运行,退出了:队形没有被破坏,输出

int main(){
    getline(cin,a);
    mega=wss(a);
    while(++jl){
        getline(cin,a);
        if(a.size()==1)break;
        //cout<<wss(a)<<' '<<mega<<' '<<"\n";
        if(find_name(a)==mega){
            cout<<"Successful @yyy loves "<<mega<<" attempt";
            return 0;
        }//轰炸成功
        else if(wss(a)!=mega){
            cout<<"Unsuccessful @yyy loves "<<mega<<" attempt"<<endl;
            cout<<jl+1<<endl;
            cout<<"yyy loves "<<find_name(a)<<endl;
            return 0;
        }//队形被破坏
    }
    cout<<"Unsuccessful @yyy loves "<<mega<<" attempt\n";
    cout<<jl<<"\n";
    cout<<"Good Queue Shape";//队形保持
}

华丽丽地结束

tips:如果有认识我的人可以看一下wss函数返回的乱码,可以断句读一下貌似跑题了(逃

转载于:https://www.cnblogs.com/ironwheel/p/9524677.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值