Pagini recente » Cod sursa (job #1980358) | Cod sursa (job #1729608) | Cod sursa (job #2752759) | Cod sursa (job #2897274) | Cod sursa (job #801602)
Cod sursa(job #801602)
#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];
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;
}