Pagini recente » Cod sursa (job #7687) | Cod sursa (job #124712) | Cod sursa (job #2751748) | Cod sursa (job #1504174) | Cod sursa (job #343668)
Cod sursa(job #343668)
#include <stdio.h>
#define INPUT "curcubeu.in"
#define OUTPUT "curcubeu.out"
int tata(int i, int *next)
{
if(!next[i]) return i;
return next[i] = tata(next[i], next);
}
void colorare(int i, int n, int a, int b, int c, int *next, int *color)
{
if(i != n-1) colorare(i+1, n, (a*(i+1))%n, (b*(i+1))%n, c*(i+1)%n, next, color);
--a; --b;
if(a > b) a+=b, b=a-b, a-=b; //interschimb
int ii;
for(ii = a; ii < n && ii <= b;)
if(!color[ii])
{
color[ii] = c;
if(ii < n-1) next[ii] = tata(b+1, next);
++ii;
}
else if(ii != n-1) ii = next[ii];
else ++ii;
}
int main()
{
freopen(INPUT, "r", stdin);
freopen(OUTPUT, "w", stdout);
int n, a, b, c;
scanf("%d %d %d %d", &n, &a, &b, &c);
int *next = new int[n];
int *color = new int[n];
int i;
for(i = 0; i < n; ++i)
color[i] = 0,
next[i] = 0;
colorare(1, n, a, b, c, next, color);
for(i = 0; i < n-1; ++i)
printf("%d\n", color[i]);
return 0;
}