Cod sursa(job #20312)

Utilizator pheon23mce mec ecm pheon23 Data 21 februarie 2007 01:07:41
Problema Xor Max Scor 5
Compilator c Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <stdlib.h>
#include <stdio.h>
#include <string.h>



long xor(long a, long b)
{
	long c=0; int i,l=21;
	int bit;
	
	
	for (i=0; i<=l; i++)
	{
		// bitul i din a  XOR bitul i din b
		bit = (a & (1<<(l-i))) ^ (b & (1<<(l-i)));
//		printf("%d",bit); 
		if (bit)
			c|=(1<<(l-i));
		else 
			c&=~(1<<(l-i));	
	}
	return c;
}

int main()
{
	int n;
	long *v,*beg,*end;
	int max=0,start=0,stop=0, total=0;
	FILE *f=fopen("xormax.in","rt"), *g=fopen("xormax.out","wt");
	
	int i,j,x=0;
	
	// citesc numarul de numere
	fscanf(f,"%d\n",&n);
	// aloc vector in care tin numerele
	v=(long*)calloc(n,sizeof(long));
	// aloc vector in care tin rez 
	beg=(long*)calloc(n,sizeof(long));
	
	//citire numere
	for(i=1;i<=n;i++)
	{
		fscanf(f,"%d",&v[i]); 
		x = xor(x,v[i]);
		beg[i]=x;
//		printf("%ld %d\n", x,v[i]);
	}
	max=0;
	total=v[n];
	
	for(i=1;i<=n; i++)
	{
		
		for (j=i;j<=n;j++)
		{
//		printf("%d-%d=%d   ",i,j,xor(beg[i-1],beg[j]));
			x=xor(beg[i-1],beg[j]);
			if (max<x) 
			{
					max=x;
					start=i;
					stop=j;
			}
		}
//		printf("\n");
	}
	
	fprintf(g,"%d %d %d",max,start,stop);
//	getch();
	
	fclose(f);
	fclose(g);
	
	return 0;
}