题解 P4896 【Oier们的烦恼】
这题模拟即可
但是注意中间好像有回车
毒瘤
竟然没发现
所以要getline一下
否则读入re qwq
于是就用随便一个容器标记一下
anyway,就可以了
注意读入。。。。
// luogu-judger-enable-o2
#include<bits/stdc++.h>
using namespace std;
int q,t,cnt=0;
map<string,bool>mps,mpt,mpans,play;
string s1,s2,s3,s4,s5,t1,t2,t3,ans[10];
bool te=false;
void work(){
if (play[s1]){
if (!mpans[s1]){mpans[s1]=true;ans[++cnt]=s1;}
}
if (play[s2]){
if (!mpans[s2]){mpans[s2]=true;ans[++cnt]=s2;}
}
if (play[s3]){
if (!mpans[s3]){mpans[s3]=true;ans[++cnt]=s3;}
}
if (play[s4]){
if (!mpans[s4]){mpans[s4]=true;ans[++cnt]=s4;}
}
if (play[s5]){
if (!mpans[s5]){mpans[s5]=true;ans[++cnt]=s5;}
}
}
int main(){
std::ios::sync_with_stdio(false);
cin>>q;t=q+1;cin>>t1;cin>>t2;cin>>t3;
mpt[t1]=mpt[t2]=mpt[t3]=true;
cin>>s1;cin>>s2;cin>>s3;cin>>s4;cin>>s5;
mps[s1]=mps[s2]=mps[s3]=mps[s4]=mps[s5]=true;
while (t--){
string s;
getline(cin,s);
if (t==q) continue;
int f=s.find("came!");
if (f!=-1){
s.erase(f);
while (s[s.size()-1]==' ') s.erase(s.size()-1);
if (!mpt[s]) continue;
te=true;work();
}
else {
f=s.find("left!");
if (f!=-1){
s.erase(f);
while (s[s.size()-1]==' ') s.erase(s.size()-1);
if (!mpt[s]) continue;
te=false;
}
else {
f=s.find("started playing games!");
if (f!=-1){
s.erase(f);
while (s[s.size()-1]==' ') s.erase(s.size()-1);
if (!mps[s]) continue;
play[s]=true;
if (te){
if (!mpans[s]){mpans[s]=true;ans[++cnt]=s;}
}
}
else {
f=s.find("stopped playing games!");
if (f==-1) continue;
s.erase(f);
while (s[s.size()-1]==' ') s.erase(s.size()-1);
if (!mps[s]) continue;
play[s]=false;
}
}
}
}
if (!cnt) cout<<"How Good Oiers Are!\n";
else {
sort(ans+1,ans+cnt+1);
for (int i=1;i<=cnt;i++) cout<<ans[i]<<(i==cnt ? '\n' : ' ');
if (cnt==5) cout<<"How Bad Oiers Are!\n";
}
return 0;
}