80pts 求调
查看原帖
80pts 求调
767748
__2009楼主2023/10/13 14:16
#include<string>
#include<iostream>
#include<string.h>
using namespace std;
string name[25];
string gc[110][2];
string day;
string s;
int is[110];
int m,n,p;
bool yygc(string q){
	if(q=="I am guilty.")return true;
	if(q=="I am not guilty.")return true;
	if(q=="Today is Sunday.")return true;
	if(q=="Today is Saturday.")return true;
	if(q=="Today is Friday.")return true;
	if(q=="Today is Thursday.")return true;
	if(q=="Today is Wednesday.")return true;
	if(q=="Today is Tuesday.")return true;
	if(q=="Today is Monday.")return true;
	for(int i=0;i+14<q.size();i++){
		if(q.substr(i,14)==" is not guilty")return true;
	}
	for(int i=0;i+10<q.size();i++){
		if(q.substr(i,10)==" is guilty.")return true;
	}
	return false;
}
int find(string nm){
	for(int j=1;j<=m;j++){
		if(name[j]==nm)return j;
	}
}
bool check(int j){
	int _;
	for(int k=1;k<=p;k++){
//  cout<<gc[k][0]<<' '<<gc[k][1]<<'\n';
		_=find(gc[k][0]);
		if(gc[k][1]=="I am guilty."){
			if(name[j]==gc[k][0]){
				if(is[j]==0)return false;
				is[j]=1;
			}
			else{
				if(is[_]==1)return false;
				is[_]=0;
			}
		}
		else if(gc[k][1]=="I am not guilty."){
			if(name[j]==gc[k][0]){
				if(is[j]==1)return false;
				is[j]=0;
			}
			else{
				if(is[_]==0)return false;
				is[_]=1;
			}
		}
		else if(gc[k][1].substr(0,9)=="Today is "){
			if(gc[k][1]==day){
				if(is[_]==0)return false;
				is[_]=1;
			}
			else{
				if(is[_]==1)return false;
				is[_]=0;
			}
		}
		else{
			bool fl=true;
			for(int i=0;i+4<gc[k][1].size();i++){
				if(gc[k][1].substr(i,4)==" not"){
					fl=false;
					break;
				}
			}
			string nam="";
			for(int i=0;i<gc[k][1].size();i++){
				if(gc[k][1][i]==' ')break;
				nam=nam+gc[k][1][i];
			}
			if(!fl){
				if(name[j]==nam){
					if(is[_]==1)return false;
					is[_]=0;
				}
				else{
					if(is[_]==0)return false;
					is[_]=1;
				}	
			}
			else{
				if(name[j]==nam){
					if(is[_]==0)return false;
					is[_]=1;
				}
				else{
					if(is[_]==1)return false;
					is[_]=0;
				}	
			}
		}
	}
	_=0;
	int __=0; 
	for(int i=1;i<=m;i++){
		if(is[i]==0)_++;
		if(is[i]==-1)__++;
	}
	return ((__+_>=n)&&(_<=n));
}
int main(){
	cin>>m>>n>>p;
	getchar();
	getchar();
	for(int i=1;i<=m;i++){
		cin>>name[i];
//      cout<<i<<' '<<name[i]<<'\n'<<'\n';
	}
//	for(int i=1;i<=m;i++){
//		cout<<name[i]<<'\n';
//	}
	for(int i=1;i<=p;){
		cin>>s;
		s=s.substr(0,s.size()-1);
		gc[i][0]=s;
		getline(cin,s);
		if(s[s.size()-1]=='.')s=s.substr(1,s.size()-1);
		else s=s.substr(1,s.size()-2);
		if(yygc(s))gc[i++][1]=s;
		else p--;
	}
//	for(int i=1;i<=p;i++){
//		cout<<gc[i][0]<<": "<<gc[i][1]<<'\n';
//	}
	int ans,jsq=0;
	for(int j=1;j<=m;j++){
		for(int i=1;i<8;i++){
			if(i==7)day="Today is Sunday.";
			else if(i==6)day="Today is Saturday.";
			else if(i==5)day="Today is Friday.";
			else if(i==4)day="Today is Thursday.";
			else if(i==3)day="Today is Wednesday.";
			else if(i==2)day="Today is Tuesday.";
			else if(i==1)day="Today is Monday.";
			for(int k=0;k<110;k++)is[k]=-1;
			if(check(j)){
//				cout<<j<<' '<<i<<'\n';
//			    for(int k=1;k<=m;k++)cout<<is[k]<<' ';
//			    cout<<'\n'; 
				jsq++;
				ans=j;
				break;
			}
		}
	}
	if(jsq==0)cout<<"Impossible\n";
	else if(jsq>1)cout<<"Cannot Determine\n";
	else cout/*<<ans<<' '*/<<name[ans]<<'\n';
	return 0;
}

错:#5 #6 #12

2023/10/13 14:16
加载中...