捞,本地正确,评测机错误,如何修改

P1039 [NOIP2003 提高组] 侦探推理

[AwA](https://www.luogu.com.cn/discuss/show/254870)
by quest_2 @ 2020-10-04 12:29:36


```cpp #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <map> #define _ 0 using namespace std; string nam,guilty,zc[105],week[8],sb[105]; int n,m,p,said[105],xs,ren[105],ship[105]; bool error; map<int,string>name; void biao()//I love map. { week[1]="Today is Monday."; week[2]="Today is Tuesday."; week[3]="Today is Wednesday."; week[4]="Today is Thursday."; week[5]="Today is Friday."; week[6]="Today is Saturday."; week[7]="Today is Sunday."; } void set(int who,int yx) { if(ship[who]&&ship[who]!=yx) error=1; else ship[who]=yx; } int main() { int i,j,k,day,zh,jh,dd,ans=0; bool flag; cin>>n>>m>>p; biao(); for (i=1; i<=n; i++) { cin>>nam; name[i]=nam; } char ch=getchar(); while(ch==10)ch=getchar();getchar(); for (i=1; i<=p; i++) { string ppp; getline(cin,zc[i]); zc[i].erase(zc[i].end()-1); for (k=0; k<zc[i].length(); k++) if (zc[i][k]!=':') ppp+=zc[i][k]; else break; for (j=1; j<=n; j++) if (ppp==name[j]) { ren[i]=j; break; } for (k=ppp.length()+2; k<zc[i].length(); k++) sb[i]+=zc[i][k]; if (sb[i]=="I am guilty.") said[i]=1; else for (j=1; j<=7; j++) if (sb[i]==week[j]) { said[i]=2; break; } if (sb[i]=="I am not guilty.") said[i]=3; else for(j=1; j<=n; j++) if (sb[i]==name[j]+" is guilty.") { said[i]=4; break; } else if (sb[i]==name[j]+" is not guilty.") { said[i]=5; break; } } for (day=1; day<=7; day++) { for (i=1; i<=n; i++) { error=false; jh=0; dd=0; memset(ship,0,sizeof(ship)); for (j=1; j<=p&&!error; j++) { if (said[j]==1) { if (i==ren[j]) set(ren[j],1); else set(ren[j],-1); } if (said[j]==2) { if (sb[j]==week[day]) set(ren[j],1); else set(ren[j],-1); } if (said[j]==3) { if (i!=ren[j]) set(ren[j],1); else set(ren[j],-1); } if (said[j]==4) { for (k=1; k<=n; k++) if(sb[j]==name[k]+" is guilty.") { if (k==i) set(ren[j],1); else set(ren[j],-1); } } if (said[j]==5) { for (k=1; k<=n; k++) if(sb[j]==name[k]+" is not guilty.") { if (k!=i) set(ren[j],1); else set(ren[j],-1); } } } for (k=1; k<=n; k++) if (ship[k]==-1) jh++; else if (ship[k]==0) dd++; if (!error&&jh<=m&&m<=jh+dd) { if(xs&&xs!=i) { cout<<"Cannot Determine"<<endl; return 0; } else xs=i; } } } if (!xs) printf ("Impossible\n"); else cout<<name[xs]<<endl; return 0; } ```
by juruolht @ 2021-06-19 17:33:34


|