Cod sursa(job #801608)

Utilizator mihaipopa12Popa Mihai mihaipopa12 Data 24 octombrie 2012 18:57:28
Problema Congr Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<fstream>
#include<cstdlib>
#include<ctime>

#define maxp 300005
#define maxval 1000005

using namespace std;

ifstream f("congr.in");
ofstream g("congr.out");

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

int main () {
	
	f >> 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 ){
		f >> 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 ){
		g << ind[i] << " ";
	}
	g << "\n";
	
	f.close();
	g.close();
	
	return 0;
}