20过不了了
查看原帖
20过不了了
1364690
yaoshuhang楼主2024/11/7 17:10
#include<bits/stdc++.h>
using namespace std;
string t[10],s[10];
bool tch[10],stu[10];
string cnt[10];
int main()
{
	int n,ans=0;
	cin>>n;
	cin>>t[1]>>t[2]>>t[3];//老师姓名
	getchar();
	cin>>s[1]>>s[2]>>s[3]>>s[4]>>s[5];//学生姓名
	getchar();
	while(n--){
		string a;
		getline(cin,a);//指令
		getchar();
		for(int j=1;j<=3;j++){//查表(老师姓名)
			if(t[j]+" came"==a){//老师来了
				tch[j]=1;
				for(int k=1;k<=5;k++){
					if(stu[k]){//学生是否在玩游戏
						if(cnt[1]!=s[j]&&cnt[2]!=s[j]&&cnt[3]!=s[j]&&cnt[4]!=s[j]&&cnt[5]!=s[j]){//学生姓名存储了没
							cnt[++ans]=s[j];
						}
					}
				}
				break;//直接跳出
				//缩小时间复杂度
			}
			else if(t[j]+" left!"==a){//老师走了
				tch[j]=0;
				break;
			}
		}
		for(int j=1;j<=5;j++){//查表(学生姓名)
			if(s[j]+" started playing games!"==a){//学生在玩游戏
				stu[j]=1;
				for(int k=1;k<=3;k++){
					if(tch[k]){//老师在不在
						if(cnt[1]!=s[j]&&cnt[2]!=s[j]&&cnt[3]!=s[j]&&cnt[4]!=s[j]&&cnt[5]!=s[j]){//学生姓名存了没
							cnt[++ans]=s[j];
							break;//有一个老师在就被发现了,不用继续找了
						}
					}
				}
				break;//查到就跳出
			}
			else if(s[j]+" stopped playing games!"==a){//学生停下玩游戏
				stu[j]=0;
				break;
			}
		}
	}
	if(ans==0){//没有玩游戏的学生或玩游戏都没被发现
		cout<<"How Good Oiers Are!";
		return 0;
	}
	sort(cnt+1,cnt+1+ans);//玩游戏被发现的学生排序
	for(int i=1;i<=ans;i++){
		cout<<cnt[i]<<' ';//输出玩游戏被发现的学生姓名
	}
	if(ans==5){//玩游戏全都被发现
		cout<<endl;
		cout<<"How Bad Oiers Are!";
	}
	return 0;
} 
//求大佬调调
2024/11/7 17:10
加载中...