Cod sursa(job #85936)

Utilizator raula_sanChis Raoul raula_san Data 23 septembrie 2007 11:50:46
Problema Curcubeu Scor 0
Compilator cpp Status done
Runda Autumn Warmup 2007, Runda 2 Marime 1.43 kb
#include <cstdio>

#define max_t 2000001
#define max_n 1000001

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

long long unsigned N, A1, B1, C1, A, B, C;

int St[max_n], Colour[max_n];

void up(int st, int dr)
{
          if(St[st] <= dr)
		  {
			St[st] = dr;
			Colour[st] = C;
		  }
		  else
		  {
			St[dr+1] = St[st];
			Colour[dr+1] = Colour[st];
			St[st] = dr;
			Colour[st] = C;
		  }
}

int main()
{
    read();
    solve();
    write();
    
    return 0;
}

void read()
{
     freopen("curcubeu.in", "rt", stdin);
     
     scanf("%llu %llu %llu %llu", &N, &A1, &B1, &C1);
     
     fclose(stdin);
}

void solve()
{
     int i, st, dr;
     
     for(i=1; i<N; ++i)
     {
              A = (A1 * i) % N;
              B = (B1 * i) % N;
              C = (C1 * i) % N;
              
              st = A < B ? A : B;
			  dr = A > B ? A : B;

              if(!st && !dr)
                     return;

              else if(!st)
                   st = 1;

              up(st, dr);
              
              A1 = A;
              B1 = B;
              C1 = C;
     }
}

void write()
{
     freopen("curcubeu.out", "wt", stdout);

	 int i = 1, dr, c;

	 while(i < N)
	 {
		while(!St[i] && i < N)
		{
			printf("0\n");
			++ i;
		}

		dr = St[i];
		c = Colour[i];

		while(i <= dr)
		{
			printf("%d\n", c);
			++ i;
		}
	 }


     fclose(stdout);
}