Pagini recente » Cod sursa (job #1851326) | Cod sursa (job #568033) | Cod sursa (job #657805) | Cod sursa (job #449660) | Cod sursa (job #95239)
Cod sursa(job #95239)
#include <stdio.h>
const char iname[] = "input.txt";
const char oname[] = "output.txt";
#define MAXN 1000000
typedef long long i64;
i64 A[MAXN], B[MAXN], C[MAXN];
int next[MAXN];
int color[MAXN + 1];
int stk[MAXN];
int find(int n)
{
int stk_len = 0;
while (n != next[n])
stk[stk_len ++] = n, n = next[n];
for (; stk_len > 0; -- stk_len)
next[stk[stk_len - 1]] = n;
return n;
}
int main(void)
{
i64 n;
FILE *fi = fopen(iname, "r");
fscanf(fi, "%lld", &n);
for (int i = 1; i < n; ++ i)
{
if (i == 1)
fscanf(fi, "%lld %lld %lld", &A[1], &B[1], &C[1]);
else
{
A[i] = (A[i - 1] * i) % n;
B[i] = (B[i - 1] * i) % n;
C[i] = (C[i - 1] * i) % n;
}
if (A[i] > B[i])
{
i64 tmp = A[i];
A[i] = B[i], B[i] = tmp;
}
next[i] = i;
}
next[n] = n;
fclose(fi);
for (int i = n - 1; i > 0; -- i)
{
int p = A[i];
while (p <= B[i])
{
if (color[p] == 0)
{
color[p] = C[i];
next[p] = find(p + 1);
}
p = next[p];
}
}
FILE *fo = fopen(oname, "w");
for (int i = 1; i < n; ++ i)
fprintf(fo, "%d\n", color[i]);
fclose(fo);
return 0;
}