Cod sursa(job #253335)

Utilizator 630r63Ilinca George Mihai 630r63 Data 5 februarie 2009 18:04:01
Problema Curcubeu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
 #include <algorithm>  
 #include <stdio.h>  
 #include <vector>  
   
 #define MAX 1000010  
 #define pb push_back  
   
 using namespace std;  
   
 int nrCase, lim, cul, casa;  
 int a[MAX], b[MAX], c[MAX], culcasa[MAX];  
 int tata[MAX], culCasa[MAX];  
   
 int main()  
 {  
     freopen("curcubeu.in", "r", stdin);  
     freopen("curcubeu.out", "w", stdout);  
   
     scanf("%d %d %d %d", &nrCase, &a[1], &b[1], &c[1]);  
   
     for (int i = 2; i < nrCase; i++)  
     {  
         a[i] = (long long) a[i - 1] * i % nrCase;  
         b[i] = (long long) b[i - 1] * i % nrCase;  
         c[i] = (long long) c[i - 1] * i % nrCase;  
     }  
   
     for (int i = 0; i <= nrCase; i++)  
     {  
         tata[i] = i + 1;  
         culCasa[i] = 0;  
     }  
   
     for (int i = 1; i < nrCase; i++)  
         if (a[i] > b[i])  
             swap(a[i], b[i]);  
   
     for (int i = nrCase - 1; i; i--)  
         for (int pozitie = a[i], prec; pozitie <= b[i]; )  
         {  
             if (!culCasa[pozitie])  
                 culCasa[pozitie] = c[i];  
             prec = pozitie;  
             pozitie = tata[prec];  
             tata[prec] = b[i] + 1;  
         }  
   
     for (int i = 1; i < nrCase; i++)  
         printf("%d\n", culCasa[i]);  
   
     fclose(stdin);  
     fclose(stdout);  
     return 0;  
}