Pagini recente » Cod sursa (job #1751188) | Cod sursa (job #2579354) | Cod sursa (job #2135605) | Cod sursa (job #2129290) | Cod sursa (job #1989901)
#include <fstream>
#include <cstdio>
#include <iomanip>
using namespace std;
ifstream is("curcubeu.in");
//ofstream os("curcubeu.out");
FILE* os = fopen("curcubeu.out", "w");
struct Culori
{
int a, b, c;
}culori[1000002];
int n, nxt[1000002], v[1000002];
void Merge(int a, int b, int c);
int Next(int a);
int main()
{
is >> n >> culori[1].a >> culori[1].b >> culori[1].c;
nxt[1] = 1;
for ( int i = 2; i < n; ++i )
{
culori[i].a = (1LL*culori[i-1].a * i ) % n;
culori[i].b = (1LL*culori[i-1].b * i ) % n;
culori[i].c = (1LL*culori[i-1].c * i ) % n;
nxt[i] = i;
}
for ( int i = n-1; i >= 1; --i )
Merge(culori[i].a, culori[i].b, culori[i].c);
for ( int i = 1; i < n; ++i )
//os << v[i] << '\n';
fprintf(os, "%d\n", v[i]);
is.close();
//os.close();
fclose(os);
return 0;
}
void Merge(int a, int b, int c)
{
if ( a > b )
swap(a, b);
while( a <= b )
{
a = nxt[a];
if ( a <= b )
{
v[a] = c;
nxt[a] = b+1;
a++;
}
}
}
int Next(int a)
{
if ( nxt[a] == a )
return a;
int f = Next( nxt[a] );
nxt[a] = f;
return f;
}