Pagini recente » Cod sursa (job #1799379) | Cod sursa (job #1245391) | Cod sursa (job #186380) | Cod sursa (job #1177444) | Cod sursa (job #85949)
Cod sursa(job #85949)
#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, k;
int St[max_n], Colour[max_n], Count[max_n];
void up(int st, int dr)
{
if(St[st] <= dr)
{
Count[st] = ++ k;
St[st] = dr;
Colour[st] = C;
}
else
{
St[dr+1] = St[st];
Colour[dr+1] = Colour[st];
St[st] = dr;
Colour[st] = C;
Count[st] = ++ k;
Count[dr+1] = ++ k;
}
}
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, c = 0, dr = 0, last = 0;
for(i=1; i<N; ++i)
{
if(i < dr)
{
if(St[i] && Count[i] > last)
{
last = Count[i];
dr = St[i];
c = Colour[i];
}
}
if(i > dr)
{
if(St[i])
{
last = Count[i];
dr = St[i];
c = Colour[i];
}
else
c = 0;
}
printf("%d\n", c);
}
fclose(stdout);
}