题意:
队形的定义为:只要这一句内含有且恰好含有一次 @,@ 的人和上一句话一样就算为队形。
若艾特的人与第一个人不同,就算队形被打破。
- 若这个人在队形被打破之前出来吱声了,或者就是他打破队形了,就算(油)炸成功了。若(油)炸成功,输出
Successful @某某某 attempt
。 - 若队形被破坏先输出
Unsuccessful @某某某 attempt1
,再输出队形第一次被破坏的行数与第一次破坏队形的人的 id。 - 如果队形一直没被打破,就先输出
Unsuccessful @某某某 attempt
,再输出队形的长度,最后输出Good Queue Shape
。
代码附赠注释。
#include<bits/stdc++.h>
using namespace std;
int queuelen=1,flag=0;
string atname,ptmp,tmp,nowname;
/*
queuelen 队列长度
flag 标记,当前的人是否@了一个人
atname 被轰炸的人
ptmp 上一个输入的字符串
tmp 当前字符串
nowname 当前说话的人
*/
void unsu(bool kind)//轰炸失败,分2种情况
{
cout<<"Unsuccessful @yyy loves "<<atname<<" attempt"<<endl;
cout<<queuelen<<endl;
if(kind)
cout<<"yyy loves "<<nowname<<endl;
else
cout<<"Good Queue Shape";
exit(0);//直接return 0;
}
void su()//轰炸成功
{
cout<<"Successful @yyy loves "<<atname<<" attempt"<<endl;
exit(0);
}
int main()
{
//*****初始化
cin>>tmp>>tmp>>nowname>>tmp;//保证大家的名字都是yyy loves ____ 的格式
while(cin>>tmp)
{
if(tmp[0]=='@')//保证第一个说话的一定艾特了一个人且只@了一个人
{
cin>>tmp>>atname;//获取被轰炸人
break;
}
}
//*****
while(cin>>tmp)
{
if(tmp==":")//说话了
{
if(ptmp==atname)//此时ptmp存储他的名字
su();//轰炸成功
if(flag)//上一个人没@人,破坏队形
unsu(1);
nowname=ptmp,queuelen++,flag=1;//存储当前的人,队列长度++,当前的人还没@人
}
if(tmp[0]=='@'&&flag==0)//艾特人数不为一个人视为破坏队形
unsu(1);
if(tmp[0]=='@')//@人
{
flag=0;//他@人了
cin>>tmp>>tmp;
if(tmp!=atname)//@别人,破坏队形
unsu(1);
}
ptmp=tmp;//上一个字符串
}
if(flag)//最后一个人没@人,破坏队形
unsu(1);
unsu(0);//没轰炸成功
return 0;
}
欢迎
本文作者:Yurchiu
本文链接:https://yz-hs.github.io/70156992a3e9/
版权声明:本博客中所有原创文章除特别声明外,均允许规范转载,转载请注明出处。所有非原创文章,按照原作者要求转载。