Pagini recente » Cod sursa (job #272104) | Cod sursa (job #2848648) | Cod sursa (job #2149172) | Cod sursa (job #440190) | Cod sursa (job #20312)
Cod sursa(job #20312)
#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;
}