Pagini recente » Cod sursa (job #1664600) | Planificare infoarena | Cod sursa (job #2568489) | Cod sursa (job #2844961) | Cod sursa (job #466073)
Cod sursa(job #466073)
Utilizator |
Marius Stroe Marius |
Data |
25 iunie 2010 22:58:45 |
Problema |
Congr |
Scor |
Ascuns |
Compilator |
cpp |
Status |
done |
Runda |
|
Marime |
0.92 kb |
#include <fstream>
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cassert>
using namespace std;
const int MAXP = 600010;
int N, M, P, Sum;
int A[MAXP], S1[MAXP], S2[MAXP];
int main()
{
ifstream fin("congr.in");
ofstream fout("congr.out");
srand(time(0));
fin >> P;
for (int i = 1; i < 2*P; ++i)
{
fin >> A[i];
A[i] %= P;
S2[i] = i;
}
M = 2*P - 1;
int pas = 1;
for (int i = 1; i <= P; ++i)
{
int x = rand() % M + 1;
S1[++N] = S2[x];
S2[x] = S2[M--];
Sum = (Sum + A[S1[N]]) % P;
}
while (Sum != 0)
{
++pas;
int x = rand() % N + 1;
int y = rand() % M + 1;
Sum = (Sum - A[S1[x]] + A[S2[y]]) % P;
int temp = S1[x];
S1[x] = S2[y];
S2[y] = temp;
}
for (int i = 1; i <= P; ++i) fout << S1[i] << " ";
fout << endl;
return 0;
}