20分求调,本地输出与洛谷不一致,且特判结尾字符
查看原帖
20分求调,本地输出与洛谷不一致,且特判结尾字符
989792
lrx___楼主2024/6/19 21:43

record

输入:

2 2 4
HELLO
GUILTY
HELLO: What is your name?
GUILTY: I am GUILTY.
GUILTY: Are you guilty?
HELLO: I am not guilty.

我的输出:HELLO。

代码:

// #include<cassert>
// #include<cctype>
// #include<climits>
// #include<cmath>
#include<cstdio>
#include<cstring>
#include<cstdlib>
// #include<ctime>
// #include<algorithm>
// using std::lower_bound;
// using std::max;
// using std::min;
// using std::next_permutation;
// using std::reverse;
// using std::sort;
// using std::swap;
// using std::unique;
// using std::upper_bound;
// #include<bitset>
// using std::bitset;
// #include<deque>
// using std::deque;
// #include<fstream>
// using std::ifstream;
// using std::ofstream;
// #include<iomanip>
// using std::fixed;
// using std::setprecision;
#include<iostream>
using std::cin;
// using std::cout;
// using std::ios;
// #include<list>
// using std::list;
// #include<map>
// using std::map;
// #include<memory>
// using std::make_unique;
// using std::move;
// using std::unique_ptr;
// #include<queue>
// using std::priority_queue;
// using std::queue;
// #include<stack>
// using std::stack;
// #include<set>
// using std::multiset;
// using std::set;
// #include<sstream>
// using std::stringstream;
#include<string>
using std::getline;
using std::string;
// using std::to_string;
// #include<utility>
// using std::make_pair;
// using std::pair;
// #include<unordered_map>
// using std::unordered_map;
// #include<unordered_set>
// using std::unordered_set;
// #include<vector>
// using std::vector;
#define UP(i,a,b) for(i=a;i<=(b);++i)
#define DN(i,a,b) for(i=a;i>=(b);--i)
#define up(i,a,b) for(i=a;i<(b);++i)
#define dn(i,a,b) for(i=a;i>(b);--i)
#define pai make_pair
#define gtch() char(getchar())
#define ptch putchar
#define EXIT() system("pause");\
return 0
typedef unsigned char unc;
typedef unsigned short uns;
typedef unsigned uni;
typedef unsigned long unl;
typedef long long ll;
typedef unsigned long long ull;
bool ___f;
char ___c,___a[45],*___p;
typedef __int128 pll;
typedef unsigned __int128 upll;
void rd(pll &r){r=0;___f=false;for(___c=gtch();___c<'0'||___c>'9';___c=gtch()){___f=(___c=='-');}for(;___c>='0'&&___c<='9';___c=gtch()){r=(r<<3)+(r<<1)+(___c^'0');}if(___f){r=~(r-1);}}
void rd(upll &r){r=0;for(___c=gtch();___c<'0'||___c>'9';___c=gtch());for(;___c>='0'&&___c<='9';___c=gtch()){r=(r<<3)+(r<<1)+(___c^'0');}}
void wt(pll r){if(!r){ptch('0');return;}if(r<0){ptch('-');r=~(r-1);}___p=___a;while(r!=0){++___p;*___p=char(r%10)^'0';r/=10;}while(___p!=___a){ptch(*___p);--___p;}}
void wt(upll r){if(!r){ptch('0');return;}___p=___a;while(r!=0){++___p;*___p=char(r%10)^'0';r/=10;}while(___p!=___a){ptch(*___p);--___p;}}
void rd(bool &r){r=false;for(___c=gtch();___c<'0'||___c>'9';___c=gtch());for(;___c>='0'&&___c<='9';___c=gtch()){r|=bool(___c^'0');}}
void rd(char &c){for(c=gtch();c==' '||c=='\r'||c=='\n';c=gtch());}
void rd(short &r){r=0;___f=false;for(___c=gtch();___c<'0'||___c>'9';___c=gtch()){___f=(___c=='-');}for(;___c>='0'&&___c<='9';___c=gtch()){r=(r<<3)+(r<<1)+(short)(___c^'0');}if(___f){r=~(r-1);}}
void rd(int &r){r=0;___f=false;for(___c=gtch();___c<'0'||___c>'9';___c=gtch()){___f=(___c=='-');}for(;___c>='0'&&___c<='9';___c=gtch()){r=(r<<3)+(r<<1)+(___c^'0');}if(___f){r=~(r-1);}}
void rd(long &r){r=0;___f=false;for(___c=gtch();___c<'0'||___c>'9';___c=gtch()){___f=(___c=='-');}for(;___c>='0'&&___c<='9';___c=gtch()){r=(r<<3)+(r<<1)+(___c^'0');}if(___f){r=~(r-1);}}
void rd(ll &r){r=0;___f=false;for(___c=gtch();___c<'0'||___c>'9';___c=gtch()){___f=(___c=='-');}for(;___c>='0'&&___c<='9';___c=gtch()){r=(r<<3)+(r<<1)+(___c^'0');}if(___f){r=~(r-1);}}
void rd(unc &c){for(c=gtch();c==' '||c=='\r'||c=='\n';c=gtch());}
void rd(uns &r){r=0;for(___c=gtch();___c<'0'||___c>'9';___c=gtch());for(;___c>='0'&&___c<='9';___c=gtch()){r=(r<<3)+(r<<1)+(uns)(___c^'0');}}
void rd(uni &r){r=0;for(___c=gtch();___c<'0'||___c>'9';___c=gtch());for(;___c>='0'&&___c<='9';___c=gtch()){r=(r<<3)+(r<<1)+(___c^'0');}}
void rd(unl &r){r=0;for(___c=gtch();___c<'0'||___c>'9';___c=gtch());for(;___c>='0'&&___c<='9';___c=gtch()){r=(r<<3)+(r<<1)+(___c^'0');}}
void rd(ull &r){r=0;for(___c=gtch();___c<'0'||___c>'9';___c=gtch());for(;___c>='0'&&___c<='9';___c=gtch()){r=(r<<3)+(r<<1)+(___c^'0');}}
void rd(char *s){for(*s=gtch();*s==' '||*s=='\r'||*s=='\n';*s=gtch());for(;~*s&&*s!=' '&&*s!='\r'&&*s!='\n';++s,*s=gtch());*s=0;}
void rd(char *s,char n){for(*s=gtch();*s==' '||*s=='\r'||*s=='\n';*s=gtch());for(;~*s&&*s!=n;++s,*s=gtch());*s=0;}
void wt(bool a){ptch('0'+a);}
void wt(char c){ptch(c);}
void wt(short r){if(!r){ptch('0');return;}if(r<0){ptch('-');r=~(r-1);}___p=___a;while(r!=0){++___p;*___p=char(r%10)^'0';r/=10;}while(___p!=___a){ptch(*___p);--___p;}}
void wt(int r){if(!r){ptch('0');return;}if(r<0){ptch('-');r=~(r-1);}___p=___a;while(r!=0){++___p;*___p=char(r%10)^'0';r/=10;}while(___p!=___a){ptch(*___p);--___p;}}
void wt(long r){if(!r){ptch('0');return;}if(r<0){ptch('-');r=~(r-1);}___p=___a;while(r!=0){++___p;*___p=char(r%10)^'0';r/=10;}while(___p!=___a){ptch(*___p);--___p;}}
void wt(ll r){if(!r){ptch('0');return;}if(r<0){ptch('-');r=~(r-1);}___p=___a;while(r!=0){++___p;*___p=char(r%10)^'0';r/=10;}while(___p!=___a){ptch(*___p);--___p;}}
void wt(unc c){ptch(c);}
void wt(uns r){if(!r){ptch('0');return;}___p=___a;while(r!=0){++___p;*___p=char(r%10)^'0';r/=10;}while(___p!=___a){ptch(*___p);--___p;}}
void wt(uni r){if(!r){ptch('0');return;}___p=___a;while(r!=0){++___p;*___p=char(r%10)^'0';r/=10;}while(___p!=___a){ptch(*___p);--___p;}}
void wt(unl r){if(!r){ptch('0');return;}___p=___a;while(r!=0){++___p;*___p=char(r%10)^'0';r/=10;}while(___p!=___a){ptch(*___p);--___p;}}
void wt(ull r){if(!r){ptch('0');return;}___p=___a;while(r!=0){++___p;*___p=char(r%10)^'0';r/=10;}while(___p!=___a){ptch(*___p);--___p;}}
void wt(char *s){for(;*s;++s){ptch(*s);}}
void wt(const char *s){for(;*s;++s){ptch(*s);}}
#ifdef _GLIBCXX_STRING
void rd(std::string &s){s.clear();for(___c=gtch();___c==' '||___c=='\r'||___c=='\n';___c=gtch());for(;~___c&&___c!=' '&&___c!='\r'&&___c!='\n';___c=gtch()){s.push_back(___c);}}
void wt(std::string s){wt(s.data());}
#endif
template<typename T,typename ...T1>void rd(T &a,T1 &...b){rd(a);rd(b...);}
template<typename T,typename ...T1>void wt(T a,T1 ...b){wt(a);wt(b...);}
template<typename T>void RD(T* a,int n=1){while(n--){rd(*a);++a;}}
ll llabs_(ll a){return a<0?-a:a;}

/*
unh[i]=true表示第i个人不诚实
ans[i]表示第i个人可能是罪犯
today[i]、zuifan[i]:-1表示未确定,0表示不可能,1表示确定
a[i].o=
1:a说自己是罪犯
2:a说自己不是
3:a说b是罪犯
4:a说b不是
5:a说今天星期b
*/
const int N(25),M(105);
bool unh[N],ans[N];
int n,m,p,today[10],zuifan[N];
string name[N];
struct word{
	int o,a,b;
}a[M];

int date(string s){
	if(s=="Monday"){
		return 1;
	}else if(s=="Tuesday"){
		return 2;
	}else if(s=="Wednesday"){
		return 3;
	}else if(s=="Thursday"){
		return 4;
	}else if(s=="Friday"){
		return 5;
	}else if(s=="Saturday"){
		return 6;
	}else if(s=="Sunday"){
		return 7;
	}else{
		return -1;
	}
}
int indx(string s){
	int i1;
	UP(i1,1,m){
		if(name[i1]==s){
			return i1;
		}
	}
	return -1;
}
void check(){
	int i1,id,id1;
	memset(zuifan,-1,sizeof zuifan);
	memset(today,-1,sizeof today);
	// wt("DB: ");
	// UP(i1,1,m){
	// 	wt(!unh[i1]," \n"[i1==m]);
	// }
	UP(i1,1,p){
		// wt("i1=",i1,"\n");
		if(a[i1].o==1){
			id=a[i1].a;
			if((unh[id]&&zuifan[id]==1)||(!unh[id]&&!zuifan[id])){
				return;
			}
			zuifan[id]=!unh[id];
		}else if(a[i1].o==2){
			id=a[i1].a;
			if((unh[id]&&!zuifan[id])||(!unh[id]&&zuifan[id]==1)){
				return;
			}
			zuifan[id]=unh[id];
		}else if(a[i1].o==3){
			id=a[i1].a;id1=a[i1].b;
			if((unh[id]&&zuifan[id1]==1)||(!unh[id]&&!zuifan[id1])){
				return;
			}
			zuifan[id1]=!unh[id];
		}else if(a[i1].o==4){
			id=a[i1].a;id1=a[i1].b;
			if((unh[id]&&!zuifan[id1])||(!unh[id]&&zuifan[id1]==1)){
				return;
			}
			zuifan[id1]=unh[id];
		}else if(a[i1].o==5){
			id=a[i1].a;id1=a[i1].b;
			if((unh[id]&&today[id1]==1)||(!unh[id]&&!today[id1])){
				return;
			}
			today[id1]=!unh[id];
		}
	}
	id=0;
	UP(i1,1,7){
		id+=(today[i1]==1);
	}
	if(id>1){
		return;
	}
	id=0;
	UP(i1,1,m){
		if(zuifan[i1]==1){
			if(id){
				return;
			}
			id=i1;
		}
	}
	ans[id]=true;
}
void dfs(int rem,int nw){
	int i1;
	if(m-nw+1<rem){
		return;
	}
	if(!rem){
		check();
		return;
	}
	UP(i1,nw,m){
		unh[i1]=true;
		dfs(rem-1,i1+1);
		unh[i1]=false;
	}
}
int main(){
	int i1,id,id1;
	unsigned i2;
	string s1,s2,s3;
	rd(m,n,p);
	UP(i1,1,m){
		rd(name[i1]);
	}
	UP(i1,1,p){
		getline(cin,s1);
		while(s1.back()=='\r'||s1.back()=='\n')s1.pop_back();
		up(i2,0,s1.size()){
			if(s1[i2]==':'&&i2<s1.size()-1&&s1[i2+1]==' '){
				s2=s1.substr(0,i2);
				id=indx(s2);
				if(id==-1)goto lb1;
				s1=s1.substr(i2+2);
				if(s1=="I am guilty."){
					a[i1].o=1;
					a[i1].a=id;
					goto lb1;
				}else if(s1=="I am not guilty."){
					a[i1].o=2;
					a[i1].a=id;
				}else if(s1.size()>11&&s1.substr(s1.size()-11)==" is guilty."){
					s2=s1.substr(0,s1.size()-11);
					id1=indx(s2);
					if(~id1){
						a[i1].o=3;
						a[i1].a=id;a[i1].b=id1;
					}
					goto lb1;
				}else if(s1.size()>15&&s1.substr(s1.size()-15)==" is not guilty."){
					s2=s1.substr(0,s1.size()-15);
					id1=indx(s2);
					if(~id1){
						a[i1].o=4;
						a[i1].a=id;a[i1].b=id1;
					}
					goto lb1;
				}else if(s1.size()>9&&s1.substr(0,9)=="Today is "){
					s2=s1.substr(9,s1.size()-10);
					id1=date(s2);
					if(~id1){
						a[i1].o=5;
						a[i1].a=id;a[i1].b=id1;
					}
					goto lb1;
				}else{
					goto lb1;
				}
			}
		}
		lb1:;
	}
	// UP(i1,1,p){
	// 	wt(a[i1].o," ",a[i1].a," ",a[i1].b,"\n");
	// }
	dfs(n,1);
	id=0;
	UP(i1,1,m){
		if(ans[i1]){
			if(id){
				wt("Cannot Determine\n");
				EXIT();
			}
			id=i1;
		}
	}
	if(!id){
		wt("Impossible\n");
		EXIT();
	}
	wt(name[id],'\n');
	EXIT();
}

2024/6/19 21:43
加载中...