题解 P4896 【OIer们的烦恼】
-
Blog
其实这道题真的很水
不信的话你们看:
有
N 条消息。 先输入N ,第2 行输入3 个老(shen)师(ben)的名字,第3 行输入5 个学(ju)生(ruo)的名字,第4-N+3 行输入N 条消息。
那么小的数据范围,才
比较完全相同字符串也很简单,这样就可以了:
if (a+b==c) /*do something*/
然后就一遍过了
代码如下:
#include <bits/stdc++.h>
using namespace std;
/*
string a[5]用来存储老师的名字
string b[10]用来存储学生的名字
string ans[10]用来存储被抓到学生的名字
bool k1用来记录现在有没有老师在
bool c[10]用来记录哪个老师来了
bool p[10]用来记录哪个学生在玩游(fu)戏(bai)
int size用来记录被抓到的学生有多少人
*/
int n,size;
bool k1,c[10],p[10],vis[10];
string a[5],b[10],t,ans[10];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n;
cin>>a[1]>>a[2]>>a[3];
cin>>b[1]>>b[2]>>b[3]>>b[4]>>b[5];
getline(cin,t);
while (n--)
{
k1=false;
getline(cin,t);
for (int i=1;i<=3;i++) if (a[i]+" came!"==t)
{
c[i]=true;
break;
}
for (int i=1;i<=3;i++) if (a[i]+" left!"==t)
{
c[i]=false;
break;
}
for (int i=1;i<=5;i++) if (b[i]+" started playing games!"==t)
{
p[i]=true;
break;
}
for (int i=1;i<=5;i++) if (b[i]+" stopped playing games!"==t)
{
p[i]=false;
break;
}
for (int i=1;i<=3;i++) if (c[i]) k1=true;
for (int i=1;i<=5;i++) if (k1&&p[i]&&!vis[i])
{
vis[i]=true;
ans[++size]=b[i];
}
}
sort(ans+1,ans+1+size); //排序
for (int i=1;i<=size;i++) cout<<ans[i]<<" ";
//特判集体腐败与无人腐败现象
if (size==0) cout<<"How Good Oiers Are!";
if (size==5) cout<<"\nHow Bad Oiers Are!";
return 0;
}
突然感觉我的跑得很慢,居然987ms
反正能过就行
算了反正蒟蒻就应该写蒟蒻的代码,要有蒟蒻的亚子