#include<bits/stdc++.h>
using namespace std;
int num[25],rub[105];
int n,m,p,wer=0,tf[21];
string name[21];
string bish[105],ans[21];
void dat(int x,int y)
{
int i,j,t=0,f=0;
for(i=0;i<p;i++)
{
int flag;
if(bish[i]=="Today is Monday.")
{
if(y==1)
{
flag=1;t++;
}
else
{
flag=0;f++;
}
if(tf[rub[i]]==-1)tf[rub[i]]=flag;
if(tf[rub[i]]!=flag)return;
}
if(bish[i]=="Today is Tuesday.")
{
if(y==2)
{
flag=1;t++;
}
else
{
flag=0;f++;
}
if(tf[rub[i]]==-1)tf[rub[i]]=flag;
if(tf[rub[i]]!=flag)return;
}
if(bish[i]=="Today is Wednesday.")
{
if(y==3)
{
flag=1;t++;
}
else
{
flag=0;f++;
}
if(tf[rub[i]]==-1)tf[rub[i]]=flag;
if(tf[rub[i]]!=flag)return;
}
if(bish[i]=="Today is Thursday.")
{
if(y==4)
{
flag=1;t++;
}
else
{
flag=0;f++;
}
if(tf[rub[i]]==-1)tf[rub[i]]=flag;
if(tf[rub[i]]!=flag)return;
}
if(bish[i]=="Today is Friday.")
{
if(y==5)
{
flag=1;t++;
}
else
{
flag=0;f++;
}
if(tf[rub[i]]==-1)tf[rub[i]]=flag;
if(tf[rub[i]]!=flag)return;
}
if(bish[i]=="Today is Saturday.")
{
if(y==6)
{
flag=1;t++;
}
else
{
flag=0;f++;
}
if(tf[rub[i]]==-1)tf[rub[i]]=flag;
if(tf[rub[i]]!=flag)return;
}
if(bish[i]=="Today is Sunday.")
{
if(y==7)
{
flag=1;t++;
}
else
{
flag=0;f++;
}
if(tf[rub[i]]==-1)tf[rub[i]]=flag;
if(tf[rub[i]]!=flag)return;
}
if(bish[i]=="I am guilty.")
{
if(rub[i]==x)
{
flag=1;t++;
}
else
{
flag=0;f++;
}
if(tf[rub[i]]==-1)tf[rub[i]]=flag;
if(tf[rub[i]]!=flag)return;
}
if(bish[i]=="I am not guilty.")
{
if(rub[i]!=x)
{
flag=1;t++;
}
else
{
flag=0;f++;
}
if(tf[rub[i]]==-1)tf[rub[i]]=flag;
if(tf[rub[i]]!=flag)return;
}
for(j=0;j<n;j++)
{
string d=name[j]+"is guilty.";
if(d==bish[i])
{
if(j==x)
{
flag=1;t++;
}
else
{
flag=0;f++;
}
if(tf[rub[i]]==-1)tf[rub[i]]=flag;
if(tf[rub[i]]!=flag)return;
}
}
for(j=0;j<n;j++)
{
string d=name[j]+"is not guilty.";
if(d==bish[i])
{
if(j!=x)
{
flag=1;t++;
}
else
{
flag=0;f++;
}
if(tf[rub[i]]==-1)tf[rub[i]]=flag;
if(tf[rub[i]]!=flag)return;
}
}
}
if(f>n||f<n)return;
ans[wer++]=name[x];
}
int main()
{
int i,j;
scanf("%d%d%d",&m,&n,&p);
for(i=0;i<m;i++)cin>>name[i];
for(i=0;i<p;i++)
{
string x,y;
cin>>x;
x.erase(x.length()-1,1);
for(j=0;j<m;j++)
{
if(name[j]==x)rub[i]=j;
}
getline(cin,y);
y.erase(0,1);
if(y[y.length()-1]=='\n'||y[y.length()-1]=='\r')
{
y.erase(y.length()-1,1);
}
bish[i]=y;
}
for(i=0;i<m;i++)
{
for(j=1;j<=7;j++)
{
memset(tf,-1,sizeof(tf));
dat(i,j);
}
}
if(wer<1)printf("Impossible");
if(wer>1)printf("Cannot Determine");
if(wer==1)cout<<ans[0];
return 0;
}
有点丑,大佬勿喷
模仿题解思路做的