Cod sursa(job #801603)

Utilizator mihaipopa12Popa Mihai mihaipopa12 Data 24 octombrie 2012 18:55:56
Problema Congr Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include<stdio.h>
#include<cstdlib>
#include<ctime>

#define maxp 300005
#define maxval 1000005

FILE*f=fopen("congr.in","r");
FILE*g=fopen("congr.out","w");

int P,rest,val[maxp<<1],mod[maxval],ind[maxp<<1];

int main () {
	
	fscanf(f,"%d",&P);
	
	for ( int i = 1 ; i <= 1000000 ; ++i ){
		mod[i] = mod[i-1] + 1;
		if ( mod[i] == P )	mod[i] = 0;
	}
	for ( int i = 1 ; i < (P<<1) ; ++i ){
		fscanf(f,"%d",&val[i]); val[i] = mod[val[i]];
		ind[i] = i;
	}
	
	for ( int i = 1 ; i <= P ; ++i ){
		rest += val[i];
		if ( rest >= P )	rest -= P;
	}
	
	srand(time(NULL));
	while ( rest ){
		int x = 1 + rand()%P;
		int y = P + 1 + rand()%(P-1);
		
		rest -= val[ind[x]];
		rest += val[ind[y]];
		if ( rest < 0 )	rest += P;
		if ( rest >= P )	rest -= P;
		ind[x] ^= ind[y] ^= ind[x] ^= ind[y];
	}
	
	for ( int i = 1 ; i <= P ; ++i ){
		fprintf(g,"%d ",ind[i]);
	}
	fprintf(g,"\n");
	
	fclose(f);
	fclose(g);
	
	return 0;
}