CodeChef submission 130842 (C++ 4.0.0-8) plaintext list. Status: TLE, problem J6, contest NOV09. By Awake (Awake), 2009-11-11 13:11:23.
#include<iostream> #include<stdio.h> #include<queue> using namespace std; int unclear,cn; void printreso(int* unres){ int i; cout<<"start :\n"; for(i=0;i<cn;i+=2) cout<<unres[i]<<" "<<unres[i+1]<<endl; cout<<"done\n"; } void Resolution(int* unres){ int i,j; bool flag; for(i=0;i<cn-2;i+=2){ flag=false; for(j=i+2;j<cn;j+=2){ if(unres[j]==-unres[i]){ unres[i]=unres[j+1]; unres[j]=unres[cn-2]; unres[j+1]=unres[cn-1]; cn-=2; flag=true; } else if(unres[j+1]==-unres[i]){ unres[i]=unres[j]; unres[j]=unres[cn-2]; unres[j+1]=unres[cn-1]; cn-=2; flag=true; } if(unres[j]==-unres[i+1]){ unres[i+1]=unres[j+1]; unres[j]=unres[cn-2]; unres[j+1]=unres[cn-1]; cn-=2; flag=true; } else if(unres[j+1]==-unres[i+1]){ unres[i+1]=unres[j]; unres[j]=unres[cn-2]; unres[j+1]=unres[cn-1]; cn-=2; flag=true; } if(flag)break; } if(flag)i-=2; } } int CheckConsistency(int* status,int* unres,int i){ // cout<<"hellow"<<endl; if(i>=cn)return true; int st1,st2,ast1,ast2,r1,r2; int m1,m2,m3,m; st1=unres[i]; st2=unres[i+1]; //cout<<i<<" "<<st2<<endl; ast1=st1>0?st1:(-1)*st1; ast2=st2>0?st2:(-1)*st2; r1=status[ast1-1]*st1; r2=status[ast2-1]*st2; if(r1<0 && r2<0)return 0; else if(r1==0 && r2==0){ //#3 cases TF,FT,TT //=============================================================== status[ast2-1]=st2/ast2; status[ast1-1]=-st1/ast1; // unclear--; m1=CheckConsistency(status,unres,i+2); if(m1==2)return 2; status[ast1-1]=0; status[ast2-1]=0; // unclear++; //=============================================================================== status[ast1-1]=st1/ast1; status[ast2-1]=-st2/ast2; // unclear-=2; m2=CheckConsistency(status,unres,i+2); if(m2==2)return 2; status[ast1-1]=0; status[ast2-1]=0; // unclear+=2; //================================================================================ status[ast1-1]=st1/ast1; status[ast2-1]=st2/ast2; // unclear-=2; m3=CheckConsistency(status,unres,i+2); if(m3==2)return 2; status[ast1-1]=0; status[ast2-1]=0; // unclear+=2; //===================================================================================== if(m1+m2+m3>=2)return 2; unclear--; return 1; } else if(r1<0 && r2==0){ status[ast2-1]=st2/ast2; unclear--; m=CheckConsistency(status,unres,i+2); if(m==0){ status[ast2-1]=0; unclear++; } return m; } else if(r2<0 && r1==0){ status[ast1-1]=st1/ast1; unclear--; m=CheckConsistency(status,unres,i+2); if(m==0){ status[ast1-1]=0; unclear++; } return m; } return CheckConsistency(status,unres,i+2); } int main(){ int t; while(t--){ bool conflict=false; int noPolitician,nStatement,u,v,au,av,st1,st2,ast1,ast2,r1,r2,i; int status[100000]={0};//null bool mark[100000]={false}; int constrains[600000],coun=0,m; int unresolved[600000],inpicture=0; unclear=noPolitician; while(nStatement--){ if(!conflict){ au=u<0?u*(-1):u; av=v<0?v*(-1):v; if(u==v){ if(status[au-1]==0){ unclear--; status[au-1]=u/au; } else if(status[au-1]!=u/au) conflict=true; } else if(au!=av){ constrains[coun++]=u; constrains[coun++]=v; } if(!mark[au-1])mark[au-1]=true,inpicture++; if(!mark[av-1])mark[av-1]=true,inpicture++; } } if(!conflict && inpicture==noPolitician){ //check for consistency i=0; cn=0; while(i<coun){ st1=constrains[i]; st2=constrains[i+1]; ast1=st1>0?st1:(-1)*st1; ast2=st2>0?st2:(-1)*st2; r1=status[ast1-1]*st1; r2=status[ast2-1]*st2; if(r1<0){ if(r2<0){ conflict=true; break; } if(r2==0){ status[ast2-1]=st2/ast2; unclear--; } } else if(r1==0){ if(r2==0){ unresolved[cn++]=st1; unresolved[cn++]=st2; } else if(r2<0){ status[ast1-1]=st1/ast1; unclear--; } } i=i+2; } if(!conflict){ Resolution(unresolved); // cout<<unresolved[cn-1]<<" size is "<<cn<<endl; // printreso(unresolved); m=CheckConsistency(status,unresolved,0); //cout<<m<<endl; if(m==2)unclear=1; else if(m==0)conflict=true; } } // cout<<unclear<<endl; } }
Comments

