过样例后提交,但是只有30分
下载了第一个数据点:
In:
2 2 4
HELLO
GUILTY
HELLO: What is your name?
GUILTY: I am GUILTY.
GUILTY: Are you guilty?
HELLO: I am not guilty.
Out:
HELLO
在我这里是对的 但是在洛谷Ide就是
“Cannot Determine”
代码如下 求各位大佬帮忙看看吧 快折磨疯了
#include<bits/stdc++.h>
using namespace std;
const string D[]={"","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
int m,n,p,B,kk,ans1,ans2,KKSK,BB[21];
string name[101],stc[101];
string N,S,NN,st,DD;
int x,y,xx,yy,b[21];
map<string,int> Map;
int main()
{
cin>>m>>n>>p;getline(cin,st);
for(int i=1;i<=m;i++)getline(cin,name[i]),Map[name[i]]=i;
for(int i=1;i<=p;i++)getline(cin,stc[i]);
for(int i=1;i<=m;i++)
for(int j=1;j<=7;j++)
{
memset(b,0,sizeof(b)),B=0;
for(int k=1;k<=p;k++)
{
x=stc[k].find(":");
N=stc[k].substr(0,x);
S=stc[k].substr(x+2,stc[k].size()-x-1);
y=Map[N];
if(S=="I am guilty.")
{
if(y==i)
{
if(b[y]==0)b[y]=1;
else if(b[y]==2)B=1;
}
else
{
if(b[y]==0)b[y]=2;
else if(b[y]==1)B=1;
}
}
if(S=="I am not guilty.")
{
//puts("");
if(y!=i)
{
if(b[y]==0)b[y]=1;
else if(b[y]==2)B=1;
}
else
{
if(b[y]==0)b[y]=2;
else if(b[y]==1)B=1;
}
}
if(S.find("is guilty.")!=-1)
{
xx=S.find("is guilty."),xx--;
NN=S.substr(0,xx);
yy=Map[NN];
//cout<<S<<" "<<NN<<" "<<yy<<endl;
if(yy==i)
{
if(b[y]==0)b[y]=1;
else if(b[y]==2)B=1;
}
else
{
if(b[y]==0)b[y]=2;
else if(b[y]==1)B=1;
}
}
if(S.find("is not guilty.")!=-1)
{
xx=S.find("is not guilty."),xx--;
NN=S.substr(0,xx);
yy=Map[NN];
if(yy!=i)
{
if(b[y]==0)b[y]=1;
else if(b[y]==2)B=1;
}
else
{
if(b[y]==0)b[y]=2;
else if(b[y]==1)B=1;
}
}
if(S.find("Today is")!=-1)
{
DD=S.substr(9,S.size()-9);
kk=0;
for(int SS=1;SS<=7;SS++)if(D[SS]==DD)kk=i;
if(kk)
{
if(kk==j)
{
if(b[y]==0)b[y]=1;
else if(b[y]==2)B=1;
}
else
{
if(b[y]==0)b[y]=2;
else if(b[y]==1)B=1;
}
}
}
if(B==1)break;
}
if(B)continue;
ans1=ans2=0;
for(int i=1;i<=m;i++)if(b[i]==2)ans1++;
for(int i=1;i<=m;i++)if(b[i]==0)ans2++;
//for(int i=1;i<=m;i++)printf("%2d",b[i]);
//puts("");
if(ans1<=n&&n<=ans1+ans2)BB[i]=1;
}
for(int i=1;i<=m;i++)KKSK+=BB[i];
//cout<<KKSK;
if(KKSK==0)puts("Impossible");
else if(KKSK>1)puts("Cannot Determine");
else for(int i=1;i<=m;i++)if(BB[i])cout<<name[i];
return 0;
}