Cod sursa(job #2794271)

Utilizator ApostolIlieDanielApostol Daniel ApostolIlieDaniel Data 4 noiembrie 2021 16:26:17
Problema Congr Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <bits/stdc++.h>

using namespace std;

using ll = long long;
#define dbg(x) cerr << #x << " " << x << "\n"

//#define HOME


int main() {
    freopen("congr.in", "r", stdin);
    freopen("congr.out", "w", stdout);
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    register int p;
    srand(time(0));
    #ifdef HOME
        p = rand() % 299999 + 2;
        dbg(p);
    #else
        cin >> p;
    #endif // HOME
    register int sum = 0;
    vector <int> v(2 * p), id(2 * p);
    for (register int i = 1; i <= 2 * p - 1; i++) {
        #ifdef HOME
            v[i] = rand() % p;
        #else
            cin >> v[i]; v[i] %= p;
        #endif // HOME
        id[i] = i;
        if (i <= p) {
            sum += v[i];
            if (sum >= p) sum -= p;
        }
    }
    #ifdef HOME
    int op = 0;
    #endif // HOME
    while (sum != 0) {
        register int ai = 1 + rand() % p, bi = p + 1 + rand() % (p - 1);
        sum -= v[id[ai]];
        if (sum < 0) sum += p;
        swap(id[ai], id[bi]);
        sum += v[id[ai]];
        if (sum >= p) sum -= p;
        #ifdef HOME
            op++;
        #endif // HOME
    }
    #ifdef HOME
        dbg(op);
    #endif // HOME

    for (register int i = 1; i <= p; i++)
        cout << id[i] << " ";
    cout << "\n";
    return 0;
}