输入:
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();
}