【Luogu P1580】yyy loves Easter_Egg I

题目大意:

【Luogu P1580】yyy loves Easter_Egg I_第1张图片

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

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

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<

华丽丽地结束

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

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

你可能感兴趣的:(【Luogu P1580】yyy loves Easter_Egg I)