Cod sursa(job #1460593)

Utilizator nnnmmmcioltan alex nnnmmm Data 13 iulie 2015 12:20:41
Problema Curcubeu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include<cstdio>
#include<algorithm>
#define NMAX 1000000
int a[NMAX+1],b[NMAX+1],c[NMAX+1];
struct casa{int culoare,urmator;};
casa v[NMAX+1];
int pp;
int URM(int x)
{
 if(v[x].urmator==-1)
    {
     return x;
    }
 v[x].urmator=URM(v[x].urmator);
 return v[x].urmator;
}
int main()
{
 freopen("curcubeu.in","r",stdin);
 freopen("curcubeu.out","w",stdout);
 int n;
 scanf("%d %d %d %d ",&n,&a[1],&b[1],&c[1]);
 v[0].urmator=v[1].urmator=-1;
 for(int i=2;i<=n-1;i++)
     {
      a[i]=((long long)a[i-1]*i)%n;
      b[i]=((long long)b[i-1]*i)%n;
      c[i]=((long long)c[i-1]*i)%n;
      v[i].urmator=-1;
     }
 pp=n;
 for(int i=n-1;i>=1 && pp!=0;i--)
     {
      int st=std::min(a[i],b[i]),dr=std::max(a[i],b[i]);
      if(st!=0 && dr!=0)
         {
          dr=URM(dr);
          while(dr>=st)
                {
                 v[dr].culoare=c[i];
                 v[dr].urmator=st-1;
                 pp--;
                 dr--;
                 dr=URM(dr);
                }
         }
     }
 for(int i=1;i<=n-1;i++)
     printf("%d\n",v[i].culoare);
fclose(stdin);
fclose(stdout);
return 0;
}