1 条题解
-
0
自动搬运
来自洛谷,原作者为

ironwheel
**搬运于
2025-08-24 21:26:42,当前版本为作者最后更新于2018-02-18 11:28:51,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
求各位神犇点赞
首先介绍一下函数:
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函数返回的乱码,可以断句读一下
貌似跑题了(逃
- 1
信息
- ID
- 573
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 3
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者