本地AC提交WA
查看原帖
本地AC提交WA
272306
A_Problem_Solver楼主2023/7/31 16:55

P1039 [NOIP2003 提高组] 侦探推理

过样例后提交,但是只有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;
}
2023/7/31 16:55
加载中...