Pagini recente » Cod sursa (job #466600) | Cod sursa (job #221910) | Cod sursa (job #2091450) | Cod sursa (job #413661) | Cod sursa (job #466900)
Cod sursa(job #466900)
#include <cstdio>
#include <algorithm>
#include <vector>
#include <ctime>
#include <cstring>
#define MAXN 300010
using namespace std;
int A[2 * MAXN + 100], right, x, m, r1, px, py, sum, gr1[MAXN], gr2[MAXN], cnt, nr, ok, P, i;
int cl[2 * MAXN + 100];
int main ()
{
freopen ("congr.in", "r", stdin);
freopen ("congr.out", "w", stdout);
scanf ("%d\n", &P);
const int n = 2 * P - 1;
for (i = 1; i <= n; i++)
{
scanf ("%d", &A[i]);
cl[i] = i;
}
m = n;
srand (time (NULL));
while (nr < P)
{
x = rand () % m + 1;
gr1[++cnt] = cl[x];
swap (cl[x], cl[m]);
--m;
++nr;
}
for (i = 1; i <= m; i++) gr2[i] = cl[i];
for (i = 1; i <= P; i++) sum += A[gr1[i]];
while (!ok)
{
r1 = sum % P;
px = rand () % P + 1;
py = rand () % m + 1;
sum -= A[gr1[px]];
sum += A[gr2[py]];
if (sum % P < r1) swap (gr1[px], gr2[py]);
else sum -= A[gr2[py]], sum += A[gr1[px]];
if (sum % P == 0) ok = 1;
}
for (i = 1; i <= P; i++)
printf ("%d ", gr1[i]);
return 0;
}