Pagini recente » Cod sursa (job #2611335) | Cod sursa (job #577420) | Cod sursa (job #1710622) | Cod sursa (job #2603750) | Cod sursa (job #2650374)
#include <bits/stdc++.h>
using namespace std;
FILE *in = fopen("curcubeu.in", "r");
const int NMAX = 1000000 + 7;
int v[NMAX];
int lft[NMAX];
int rght[NMAX];
int color[NMAX];
int skip_list[NMAX];
/*void dfs_skip(int poz)
{
if(v[poz] != 0)
{
dfs_skip(skip_list[poz]);
skip_list[poz] = skip_list[skip_list[poz]];
}
}*/
const int B = 4000000;
char outBuffer[B + 100]; unsigned int p;
__attribute__((always_inline)) void write(unsigned int x)
{
unsigned int digits = x > 0x3B9AC9FF ? 0xA :
x > 0x5F5E0FF ? 0x9 :
x > 0x98967F ? 0x8 :
x > 0xF423F ? 0x7 :
x > 0x1869F ? 0x6 :
x > 0x270F ? 0x5 :
x > 0x3E7 ? 0x4 :
x > 0x63 ? 0x3 :
x > 0x9 ? 0x2 : 0x1;
for(unsigned int i = ~-digits; ~i; --i)
{
outBuffer[p + i] = x % 0xA + 0x30;
x = x / 0xA;
}
p = p + digits;
outBuffer[p++] = '\n';
if (p > B)
{
puts(outBuffer);
for (int i = 0; i <= p; i++)
{
outBuffer[i] = 0;
}
p = 0;
}
}
int main()
{
int n, a, b, c; fscanf(in, "%d%d%d%d", &n, &a, &b, &c);
freopen("curcubeu.out", "w", stdout);
lft[1] = min(a, b);
rght[1] = max(a, b);
color[1] = c;
for(int i = 2; i <= n-1; i++)
{
a = (1LL * a * i) % n;
b = (1LL * b * i) % n;
c = (1LL * c * i) % n;
lft[i] = min(a, b);
rght[i] = max(a, b);
color[i] = c;
}
for(int i = n-1; i >= 1; i--)
{
for(int j = lft[i]; j <= rght[i]; j=j)
{
if(v[j] != 0)
{
int new_j = skip_list[j];
skip_list[j] = rght[i]+1;
j = new_j;
}
else
{
v[j] = color[i];
skip_list[j] = rght[i]+1;
j++;
}
}
}
for(int i = 1; i <= n-1; i++)
write(v[i]);
puts(outBuffer);
}