Cod sursa(job #466073)

Utilizator MariusMarius 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;
}