yyy loves Easter_Egg I(恶心的字符串模拟)

题目背景

Soha的出题效率着实让人大吃一惊。OI,数学,化学的题目都出好了,物理的题还没有一道。于是,Huntfire,absi2011,redbag对soha进行轮番炸,准备炸到soha出来,不料,人群中冲出了个kkksc03……

题目描述

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"/* yyy loves Microelectronic 是kkksc03*/

输入输出格式

输入格式:

 

N行,为轰炸开始后的一段消息记录,每行一条消息。消息格式:“消息发送者 + ‘ : ’+消息内容”,每行消息长度不超过1000。(中文用拼音代替了)

 

输出格式:

 

若(油)炸成功,输出“Successful @某某某 attempt”,若队形被破坏第一行输出“Unsuccessful @某某某 attempt”,接下来一行输出队形第一次被破坏的行数,第三行输出第一次破坏队形的人的id,如果队形一直没被打破,就先输出“Unsuccessful @某某某 attempt”,再输出队形的长度,最后输出"Good Queue Shape"

 

思路:

恶心到吐

数据还是在windows下出的

换行符是\r\n

坑死我了

按题意模拟即可

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <bitset>
#include <queue>
#include <cstdlib>
#include <algorithm>
#define rii register int i
#define rij register int j
using namespace std;
char zha[1005],name[1005],xl[1005],at[1005];
int lzha,lname,lxl;
int bnt;
int main()
{
    // freopen("k.in","r",stdin);
    char c;
    while(1)
    {
        lname=0;
        bnt++;
        lxl=0;
        int wz;
        while(~scanf("%c",&c))
        {
            if(c==10||c==13)
            {
                scanf("\n");
                break;
            }
            lxl++;
            xl[lxl]=c;
        }
        int kkk=0;
        for(rii=1;i<=lxl;i++)
        {
            if(xl[i]=='@')
            {
                kkk++;
            }
        }
        if(lxl==0)
        {
            break;
        }
        for(rii=1;i<=lxl;i++)
        {
            if(xl[i]==':')
            {
                wz=i+2;
                break;
            }
            lname++;
            name[lname]=xl[i];
        }
        if(bnt!=1)
        {
            if(lzha+1==lname)
            {
                int dp=0;
                for(rii=1;i<=lzha;i++)
                {
                    if(zha[i]!=name[i])
                    {
                        dp=1;
                        break;
                    }
                }
                if(dp==0)
                {
                    cout<<"Successful @";
                    for(rii=1;i<=lname;i++)
                    {
                        putchar(name[i]);
                    }
                    cout<<"attempt";
                    return 0;
                }
            }
        }
        int lat=0,pd=0,cnt=0;
        for(rii=wz;i<=lxl;i++)
        {
            if(xl[i]=='@')
            {
                pd=1;
                continue;
            }
            if((xl[i]==' '||xl[i]==13)&&pd==1)
            {
                cnt++;
            }
            if(cnt>=3)
            {
                wz=i+1;
                if(xl[i]==13)
                {
                    wz++;
                }
                break;
            }
            if(pd==1)
            {
                lat++;
                at[lat]=xl[i];
            }
        }
        if((lat!=lzha||pd==0||kkk>1)&&bnt!=1)
        {
            cout<<"Unsuccessful @";
            for(rii=1;i<=lzha;i++)
            {
                putchar(zha[i]);
            }
            putchar(' ');
            cout<<"attempt";
            puts("");
            cout<<bnt<<endl; 
            for(rii=1;i<=lname;i++)
            {
                putchar(name[i]);
            }
            return 0;
        }
        if(lat==lzha&&bnt!=1)
        {
            for(rii=1;i<=lat;i++)
            {
                if(at[i]!=zha[i])
                {
                    cout<<"Unsuccessful @";
                    for(rii=1;i<=lzha;i++)
                    {
                    putchar(zha[i]);
                    }
                    putchar(' ');
                    cout<<"attempt";
                    puts("");
                    cout<<bnt<<endl; 
                    for(rii=1;i<=lname-1;i++)
                    {
                        putchar(name[i]);
                    }
                    return 0;
                }
            }
        }
        if(bnt==1)
        {
            lzha=lat;
            for(rii=1;i<=lat;i++)
            {
                zha[i]=at[i];
            }
        }
    }
    // puts("kkk");
    bnt--;
    cout<<"Unsuccessful @";
    for(rii=1;i<=lzha;i++)
    {
        putchar(zha[i]);
    }
    puts(" attempt");
    cout<<bnt<<endl; 
    puts("Good Queue Shape");
}

 

转载于:https://www.cnblogs.com/ztz11/p/9917787.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值