首先这是我的代码
#include<bits/stdc++.h>
using namespace std;
inline long long read()
{
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=x*10+(ch-'0');
ch=getchar();
}
return x*f;
}
struct node{
string s;
int a;//自己是不是罪犯
int b;//指向他人
string c;//日期
}a[10001];
char ch[10001];
int judge[10001];
int f[101][101];
int main()
{
int m=read();
int n=read();
int p=read();
for(int i=1;i<=m;i++)
{
cin>>a[i].s;
a[i].a=-1;
a[i].b=-1;
a[i].c="0";
}
int top=0;
string s1;
string s2;
string s3;
string s4;
char ch=getchar();
for(int k=1;k<=p;k++)
{
top=-1;
// ch[++top]=getchar();
// while(ch[top]!=':')
// {
// s1[top-1]=ch[top];
// ch[++top]=getchar();
// }
getline(cin,s4);
// cout<<s4<<endl;
s3="0";
while(s4[++top]!=':');
// cout<<top<<endl;
s3=s4.substr(0,top);
// cout<<s3<<endl;
// cout<<s1<<endl;
for(int i=1;i<=m;i++)
{
// cout<<a[i].s<<" "<<s3<<endl;
if(a[i].s==s3)
{
s2=s4.substr(top+2,s4.size()-1-top);
// cout<<s2<<endl;
for(int j=0;j<=s2.size()-1;j++)
{
if(s2[j]>='A'&&s2[j]<='Z')
{
s2[j]=s2[j]-('A'-'a');
}
}
if(s2=="i am guilty.")
a[i].a=1;
else
if(s2=="i am not guilty.")
a[i].a=0;
else
if(s2=="today is sunday."||s2=="today is monday."||s2=="today is tuesday."||s2=="today is wednesday."||s2=="today is thursday."||s2=="today is friday."||s2=="today is saturday.")
a[i].c=s2;
else
if(s2.find(" is guilty.")<=s2.size()+1)
{
int topp=-1;
s3="0";
while(s2[++topp]!=' ')
{
if(s2[topp]>='a'&&s2[topp]<='z')
{
s2[topp]=s2[topp]-('a'-'A');
}
}
s3=s2.substr(0,topp);
// cout<<s3<<endl;
for(int j=1;j<=m;j++)
{
if(a[j].s==s3)
a[i].b=j;
}
}
}
}
}
int cnt;
int ans=-2;
for(int i=1;i<=m;i++)
{
for(int j=1;j<=m;j++)
{
if(i!=j)
{
if(a[i].c!=a[j].c&&(a[i].c!="0"&&a[j].c!="0"))
{
f[i][j]=1;
}
}
}
}
for(int i=1;i<=m;i++)
{
bool flag=0;
for(int j=1;j<=m;j++)
judge[j]=-1;
for(int j=1;j<=m;j++)
{
if(a[j].a==1&&j!=i)
{
if(judge[j]==0)
{
flag=1;
break;
}
judge[j]=1;
bool flagg=0;
for(int k=1;k<=m;k++)
if(f[j][k])
{
if(judge[k]==1)
{
flag=1;
flagg=1;
break;
}
judge[k]=0;
}
if(flagg)
break;
}
if(a[j].a==1&&j==i)
{
if(a[j].b==i||a[j].b==-1)
{
if(judge[j]==1)
{
flag=1;
break;
}
judge[j]=0;
bool flagg=0;
for(int k=1;k<=m;k++)
if(f[j][k])
{
if(judge[k]==0)
{
flag=1;
flagg=1;
break;
}
judge[k]=1;
}
if(flagg)
break;
}
else
{
if(judge[j]==0)
{
flag=1;
break;
}
judge[j]=1;
bool flagg=0;
for(int k=1;k<=m;k++)
if(f[j][k])
{
if(judge[k]==1)
{
flag=1;
flagg=1;
break;
}
judge[k]=0;
}
if(flagg)
break;
}
}
if(a[j].a==0&&j==i)
{
if(judge[j]==0)
{
flag=1;
break;
}
judge[j]=1;
bool flagg=0;
for(int k=1;k<=m;k++)
if(f[j][k])
{
if(judge[k]==1)
{
flag=1;
flagg=1;
break;
}
judge[k]=0;
}
if(flagg)
break;
}
if(a[j].a==0&&j!=i)
{
if(a[j].b==i||a[j].b==-1)
{
if(judge[j]==1)
{
flag=1;
break;
}
judge[j]=0;
bool flagg=0;
for(int k=1;k<=m;k++)
if(f[j][k])
{
if(judge[k]==0)
{
flag=1;
flagg=1;
break;
}
judge[k]=1;
}
if(flagg)
break;
}
else
{
if(judge[j]==0)
{
flag=1;
break;
}
judge[j]=1;
bool flagg=0;
for(int k=1;k<=m;k++)
if(f[j][k])
{
if(judge[k]==1)
{
flag=1;
flagg=1;
break;
}
judge[k]=0;
}
if(flagg)
break;
}
}
if(a[j].b!=i&&a[j].b!=-1)
{
if(judge[j]==0)
{
flag=1;
break;
}
judge[j]=1;
bool flagg=0;
for(int k=1;k<=m;k++)
if(f[j][k])
{
if(judge[k]==1)
{
flag=1;
flagg=1;
break;
}
judge[k]=0;
}
if(flagg)
break;
}
if(a[j].b==i)
{
if(judge[j]==1)
{
flag=1;
break;
}
judge[j]=0;
bool flagg=0;
for(int k=1;k<=m;k++)
if(f[j][k])
{
if(judge[k]==0)
{
flag=1;
flagg=1;
break;
}
judge[k]=1;
}
if(flagg)
break;
}
}
if(flag!=1)
{
cnt=0;
for(int j=1;j<=m;j++)
if(judge[j]==-1)
{
ans=max(-2,ans);
cnt=-1;
break;
}
// cout<<ans<<endl;
if(cnt==-1)
continue;
for(int j=1;j<=m;j++)
{
if(judge[j]==1)
cnt++;
}
if(cnt==n)
{
if(ans<=0)
ans=i;
else
{
ans=-1;
break;
}
}
}
}
// for(int i=1;i<=m;i++)
// {
// cout<<a[i].a<<" "<<a[i].b<<" "<<a[i].c<<endl;
// }
if(ans==-2)
cout<<"Impossible"<<endl;
if(ans==-1)
cout<<"Cannot Determine"<<endl;
if(ans>=0)
cout<<a[ans].s<<endl;
// cout<<ans<<endl;
return 0;
}
然后这是数据(第一个点)
2 2 4
HELLO
GUILTY
HELLO: What is your name?
GUILTY: I am GUILTY.
GUILTY: Are you guilty?
HELLO: I am not guilty.
答案是HELLO
在本地上我的程序正常运行,答案正确。
提交到洛谷上却告诉我我的程序输出的以I开头,WA掉了
???谁来帮帮我