Pagini recente » Cod sursa (job #2217323) | Cod sursa (job #307277)
Cod sursa(job #307277)
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define FLIP_MAX 100000
typedef struct{
int x,y,xn,yn;
}conditie;
int val[101];
int eval(conditie c){
int a = val[c.x];
int b = val[c.y];
if(c.xn) a = !a;
if(c.yn) b = !b;
return (a || b);
}
conditie cond[1001];
int nrC,flipNo;
int n,m;
void citire(void){
FILE *f=fopen("party.in","r");
fscanf(f,"%d %d",&n,&m);
int i,x,y,z;
for(i=0;i<m;++i){
fscanf(f,"%d %d %d",&x,&y,&z);
cond[nrC].x=x;
cond[nrC].y=y;
cond[nrC].xn=0;
cond[nrC].yn=0;
switch(z){
case 0:
++nrC;
break;
case 1:
cond[nrC].yn=1;
++nrC;
break;
case 2:
cond[nrC].xn=1;
++nrC;
break;
case 3:
cond[nrC].yn=1;
++nrC;
cond[nrC].x=x;
cond[nrC].y=y;
cond[nrC].xn=1;
++nrC;
break;
}
}
fclose(f);
for(i=1;i<=n;++i)
val[i] = 1;
}
int flip(){
++flipNo;
return ( rand()%2 );
}
void find(){
int nr=0;
while(nr<nrC && flipNo<FLIP_MAX){
if( eval(cond[nr]) ){
++nr;
}else{
if( flip() ){
val[ cond[nr].x ] = !val[ cond[nr].x ];
}else{
val[ cond[nr].y ] = !val[ cond[nr].y ];
}
nr = 0;
}
}
}
void scrie(void){
int i;
int nr=0;
for(i=1;i<=n;++i)
if(val[i])
++nr;
FILE *f=fopen("party.out","w");
fprintf(f,"%d\n",nr);
for(i=1;i<=n;++i)
if(val[i])
fprintf(f,"%d\n",i);
fclose(f);
}
int main(void){
srand(time(NULL));
citire();
find();
scrie();
return 0;
}