Pagini recente » Cod sursa (job #808402) | Cod sursa (job #2582427) | Cod sursa (job #1655457) | Cod sursa (job #2075324) | Cod sursa (job #801610)
Cod sursa(job #801610)
#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;
}