Cod sursa(job #3152177)

Utilizator catalinmarincatalinmarin catalinmarin Data 24 septembrie 2023 11:29:35
Problema Curcubeu Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.72 kb
#include <fstream>
using namespace std;
int ai[1000001];
int bi[1000001];
int ci[1000001];
int v[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 capat_interval_st = min(ai[n - 1], bi[n - 1]);
    int capat_interval_dr = max(ai[n - 1], bi[n - 1]);
    for (int i = capat_interval_st; i <= capat_interval_dr; i++){
        v[i] = ci[n - 1];
    }
    for (int i = n - 2; i >= 1; i--){
        int capat_interval_st_2 = min(ai[i], bi[i]);
        int capat_interval_dr_2 = max(ai[i], bi[i]);
        if (capat_interval_st_2 < capat_interval_st && capat_interval_dr_2 > capat_interval_dr){
            for (int j = capat_interval_st_2; j < capat_interval_st; j++){
                v[j] = ci[i];
            }
            for (int j = capat_interval_dr_2; j > capat_interval_dr; j--){
                v[j] = ci[i];
            }
        } else if (capat_interval_st_2 > capat_interval_st && capat_interval_dr_2 > capat_interval_dr){
            for (int j = capat_interval_dr_2; j > capat_interval_dr; j--){
                v[j] = ci[i];
            }
        } else if(capat_interval_st_2 < capat_interval_st && capat_interval_dr_2 < capat_interval_dr){
            for (int j = capat_interval_st_2; j < capat_interval_st; j++){
                v[j] = ci[i];
            }
        }
        capat_interval_st = capat_interval_st_2;
        capat_interval_dr = capat_interval_dr_2;
    }
    for (int i = 1; i < n; i++){
        fout << v[i] << '\n';
    }
    return 0;
}