Cod sursa(job #567240)

Utilizator irene_mFMI Irina Iancu irene_m Data 29 martie 2011 21:22:40
Problema Curcubeu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <cstdio>
#define infile "curcubeu.in"
#define outfile "curcubeu.out"
#define MaxN 1000002

int cul[MaxN],next[MaxN],a[MaxN],b[MaxN],c[MaxN];
int A,B,C,N;

void read()
{
      scanf("%d%d%d%d",&N,&A,&B,&C);
}

void solve()
{
      int i,j;
      for(i=1;i<N;i++) next[i]=i;

      for(i=1;i<N;i++)
      {
            if(A<B)
            {
                  a[i]=A; b[i]=B; c[i]=C;
            }
            else
            {
                  a[i]=B; b[i]=A; c[i]=C;
            }
            A = ( (long long) A * (i+1) ) % N;
            B = ( (long long) B * (i+1) ) % N;
            C = ( (long long) C * (i+1) ) % N;
      }


      A=a[N-1]; B=b[N-1]; C=c[N-1];
      for(i=A;i<=B;i++)
                  cul[i]=C, next[i]=B;

      for(j=N-2;j>=1;j--)
      {
            A=a[j]; B=b[j]; C=c[j];
            i=A;
            while(i<=B)
            {
                  if(next[i]==i)
                  {
                        if(!cul[i])
                              cul[i]=C;
                        next[i]=B;
                        i++;
                  }
                  else
                        i=next[i];
            }
      }
}

void write()
{
      int i;
      for(i=1;i<N;i++)
            printf("%d\n",cul[i]);
}

int main()
{
      freopen(infile,"r",stdin);
      freopen(outfile,"w",stdout);

      read();
      solve();
      write();

      fclose(stdin);
      fclose(stdout);
      return 0;
}