| ||||||||||
Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
诡异的WA#include <iostream> using namespace std; const int MaxN=2000; struct Bugs { int parent; int sex; }p[MaxN+1]; int Find(int x) { int i,tmp1,tmp2,sex1,sex2; sex1=0; sex2=0; for(i=x;p[i].parent!=i;i=p[i].parent) sex1+=p[i].sex; while(i!=x) { tmp1=p[x].parent; tmp2=p[x].sex; p[x].parent=i; p[x].sex=(sex1-sex2)%2; x=tmp1; sex2+=tmp2; } return i; } bool Union(int R1,int R2,int r1,int r2) { if(R1==R2&&p[r1].sex!=p[r2].sex) return true; if(R1!=R2) { p[R1].parent=R2; int i; for(i=0;i<=1;i++) if((p[r1].sex+i+p[r2].sex)%2==1) break; p[R1].sex=i; return true; } return false; } int main() { int n,i,j; int N,K; bool right; int r1,r2; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d%d",&N,&K); for(j=1;j<=N;j++) { p[j].parent=j; p[j].sex=0; } right=true; for(j=1;j<=K;j++) { scanf("%d%d",&r1,&r2); if(right==false) continue; if(Union(Find(r1),Find(r2),r1,r2)==false) right=false; } /**********************************************************/ cout<<"Scenario #"<<i+1<<":"<<endl; if(right==true) cout<<"No Suspicious bugs found!"<<endl; else cout<<"Suspicious bugs found!"<<endl; cout<<endl; /**********************************************************/ } //system("Pause"); } 这段程序交上去会WA,但如果把两条注释线间的输出部分改为 printf("Scenario #%d:\n",i+1); if(right==false) { printf("Suspicious bugs found!\n\n"); } else { printf("No suspicious bugs found!\n\n"); } 就AC了,这实在有点看不明白,printf和cout到底有什么区别? Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator