Cod sursa(job #1711985)

Utilizator andreicoman299Coman Andrei andreicoman299 Data 1 iunie 2016 19:02:35
Problema Xor Max Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <stdio.h>
int q[24];int i, max, st, fin;struct A{int c;A *fii[2];A(){c=100000;fii[0]=fii[1]=0;}};A *T=new A;void y(A *b, int ind){if(ind<0)b->c=i;else{if(b->fii[q[ind]]==0)b->fii[q[ind]]=new A;y(b->fii[q[ind]], ind-1);}}void z(A *b, int val, int ind){if(ind==-1){if(max<val){max=val;st=b->c;fin=i;}}else{if(q[ind]==0){if(b->fii[1]!=0)z(b->fii[1], val+(1<<ind), ind-1);else if(b->fii[0]!=0)z(b->fii[0], val, ind-1);}else{if(b->fii[0]!=0)z(b->fii[0], val+(1<<ind), ind-1);else if(b->fii[1]!=0)z(b->fii[1], val, ind-1);}}}int main(){int n;FILE*fi,*fo;fi=fopen("xormax.in","r");fo=fopen("xormax.out","w");fscanf(fi,"%d", &n);max=-1;i=0;y(T, 22);for(i=1;i<=n;i++){int x;fscanf(fi,"%d", &x);for(int j=0;j<=22;j++){q[j]=(q[j]^(x%2));x/=2;}z(T, 0, 22);y(T, 22);}fprintf(fo,"%d %d %d", max, st+1, fin);fclose(fi);fclose(fo);return 0;}