Cod sursa(job #1256459)

Utilizator BarbuDorelDorel Barbu BarbuDorel Data 6 noiembrie 2014 12:28:40
Problema Xor Max Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.51 kb
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream in("xormax.in");
ofstream out("xormax.out");

const int MAXN = 100000;

int v[MAXN+1], N, d[MAXN+1];
int sol = -2000000, start, finish;


int main()
{
    in>>N;

    for(int i = 1; i <= N; i++)
    {
        in>>v[i];
        if( v[i] > sol )
        {
            sol = v[i];
            start = i;
            finish = i;
        }
    }

    d[1] = v[1];

    for(int i = 2; i <= N; i++)
        d[i] = d[i-1]^v[i];

    for(int i = 1; i <= N; i++)
        for(int j = i; j <= N; j++)
            {
                int c = d[i]^d[j];

                if( c > sol )
                {
                    sol = c;
                    start = i + 1;
                    finish = j;
                }
                else
                if( c == sol )
                {
                    if( j < finish )
                    {
                        start = i + 1;
                        finish = j;
                    }
                    else
                    if( j == finish )
                    {
                        int lgc = j - (i+1) + 1;
                        int lg = finish-start+1;
                        if( lgc < lg )
                        {
                            start = i + 1;
                            finish = j;
                        }
                    }
                }
            }

    out<<sol<<' '<<start<<' '<<finish;

    return 0;
}