Cod sursa(job #12167)

Utilizator goguGogu Marian gogu Data 3 februarie 2007 00:41:01
Problema Xor Max Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <stdio.h>
#include <string.h>
#define cit(x) {x=0; while (lin[poz]>='0') x=10*x+lin[poz++]-'0'; poz++; }

int n, a[100100];
char ok[1<<21];

void cheat()
{

}

int main()
{
    freopen("xormax.in", "r", stdin);
    freopen("xormax.out", "w", stdout);
    scanf("%d\n", &n); n++;
    char lin[1<<20];
    gets(lin);
    int i, j, poz=0;
    unsigned pow=0;
    for (i=1; i<n; i++){
        cit(j); a[i]=a[i-1]^j;
    }
    for (i=0; i<n; i++)
        if (a[i]>pow) pow=a[i];
    while (pow & (pow+1)) pow++;
    for (i=0; i<n; ok[a[i]]=1, ++i)
        if (ok[pow-a[i]])
           for (j=i-1; j>=0; j--)
               if (a[j]^a[i]==pow){
                  printf("%d %d %d\n", pow, j+1, i);
                  return 0;
               }
    int best=-1, p, u;
    for (i=1; i<n; i++)
        for (j=i-1; j>=0; j--){
            if ((a[j]^a[i]) > best) best=(a[j]^a[i]), p=j, u=i;
//            printf("%d %d %d %d\n", j, i, a[j]^a[i], best);
        }
    printf("%d %d %d\n", best, p+1, u);
    return 0;
}