Cod sursa(job #3152182)

Utilizator catalinmarincatalinmarin catalinmarin Data 24 septembrie 2023 11:45:11
Problema Curcubeu Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <fstream>
using namespace std;
int ai[1000001];
int bi[1000001];
int ci[1000001];
int v[1000001];
int urm[1000001];
ifstream fin("curcubeu.in");
ofstream fout("curcubeu.out");
int main(){
    int n, a1, b1, c1;
    fin >> n >> a1 >> b1 >> c1;
    ai[1] = a1;
    bi[1] = b1;
    ci[1] = c1;
    for (int i = 2; i < n; i++){
        ai[i] = (ai[i - 1] * i) % n;
        bi[i] = (bi[i - 1] * i) % n;
        ci[i] = (ci[i - 1] * i) % n;
    }
    int capIntSt = min(ai[n - 1], bi[n - 1]);
    int capIntDr = max(ai[n - 1], bi[n - 1]);
    for (int i = capIntSt; i <= capIntDr; i++){
        v[i] = ci[n - 1];
        urm[i] = capIntDr + 1;
    }
    for (int i = n - 2; i >= 1; i--) {
        capIntSt = min(ai[i], bi[i]);
        capIntDr = max(ai[i], bi[i]);
        int poz = capIntSt;
        while (poz < n && urm[poz] <= capIntDr) {
            if (poz < n) {
                if (urm[poz] == 0) {
                    urm[poz] = capIntDr + 1;
                    v[poz] = ci[i];
                    poz++;
                } else {
                    poz = urm[poz];
                }
            }
        }
    }
    for (int i = 1; i < n; i++){
        fout << v[i] << '\n';
    }
    return 0;
}