Cod sursa(job #2400776)

Utilizator RaduXD1Nicolae Radu RaduXD1 Data 9 aprilie 2019 09:09:12
Problema Xor Max Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.18 kb
#include<fstream>
#include<queue>
#include<bitset>
using namespace std;
ifstream fin("xormax.in");
ofstream fout("xormax.out");
bitset<33> aux;
int a,ac,i,n,j,maxi,st,dr;
struct nod{
    int ok;
    nod *fiu[2];
};
void reset(nod *lvl)
{
    lvl->ok=0;
    for(int i=0;i<=1;i++) lvl->fiu[i]=NULL;
}

void creaza(int niv, nod *lvl)
{
    if(niv==-1){
        lvl->ok=i;
        return;
    }
    bool ca=aux[niv];
    nod *r;
    r=lvl->fiu[ca];
    if(r==NULL)
    {
        r=new nod;reset(r);
        lvl->fiu[ca]=r;
    }
    creaza(niv-1, r);
}
void cauta(int niv, nod *lvl,int sum)
{
    if(niv==-1){
        if(maxi<sum)
        {
            maxi=sum;
            st=lvl->ok+1;
            dr=i;
        }
        return;
    }
    bool ca=1-aux[niv];
    nod *r;
    r=lvl->fiu[ca];
    if(r==NULL) r=lvl->fiu[1-ca];
    else sum+=(1<<niv);
    //if(r==NULL) return;
    cauta(niv-1,r,sum);
}
int main()
{
    fin>>n;
    nod *b;
    b=new nod; reset(b);
    for(i=1;i<=n;i++)
    {
        fin>>a;ac^=a;
        aux=ac;
        if(i!=1) cauta(32,b,0);
        creaza(32,b);
    }
    fout<<maxi<<" "<<st<<" "<<dr;
    return 0;
}