Cod sursa(job #1346175)

Utilizator tudorv96Tudor Varan tudorv96 Data 18 februarie 2015 07:47:46
Problema Curcubeu Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <fstream>
using namespace std;

ifstream fin ("curcubeu.in");
ofstream fout ("curcubeu.out");

const int N = 4e6 + 5;

int n, a, b, c, Next[N], v[N];

pair <pair <int, int>, int> mc[N];

int find(int x) {
    if (Next[x] != x)
        Next[x] = find(Next[x]);
    return Next[x];
}

void unite(int x, int y) {
    Next[x] = find(y);
}

int main() {
    fin >> n >> a >> b >> c;
    for (int i = 1; i < n; ++i) {
        Next[i] = i;
        mc[i] = make_pair (make_pair(min(a, b), max(a, b)), c);
        a = (1LL * a * (i + 1)) % n;
        b = (1LL * b * (i + 1)) % n;
        c = (1LL * c * (i + 1)) % n;
    }
    for (int i = n - 1; i; --i) {
        for (int j = mc[i].first.first; j <= mc[i].first.second; ++j)
            if (Next[j] != j) {
                j = Next[j];
                continue;
            }
            else
                if (!v[j]) {
                    v[j] = mc[i].second;
                    unite(j, mc[i].first.second);
                }
    }
    for (int i = 1; i < n; ++i)
        fout << v[i] << "\n";
}