Cod sursa(job #2228493)

Utilizator Dobricean_IoanDobricean Ionut Dobricean_Ioan Data 3 august 2018 22:11:00
Problema Curcubeu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <cstdio>
#include <algorithm>

using namespace std;

const int Dim = 1000001;
int n,A[Dim],B[Dim],C[Dim],V[Dim],Next[Dim];
void Get(int &x);

int main() {
	
	freopen("curcubeu.in","r",stdin);
	freopen("curcubeu.out","w",stdout);
	
	Get(n), Get(A[1]), Get(B[1]), Get(C[1]);
	Next[1] = 1;
	for ( int i = 2; i < n; ++i) { 
		A[i] = (A[i-1] * i) % n;
		B[i] = (B[i-1] * i) % n;
		C[i] = (C[i-1] * i) % n;
		Next[i] = i;
	}
	int i = n - 1,st,dr;
	while(i >= 1) {
		st = min(A[i],B[i]);
		dr = min(A[i],B[i]);
		while( st <= dr) {
			if ( V[st] )
				st = Next[st];
			else {
				V[st] = C[i];
				Next[st] = dr + 1;
				}
		++st;
		}
	--i;
	}
	for ( int i = 1; i < n; ++i)
		printf("%d\n", V[i]);
}

const int Lim = 19000000;
int u =  Lim - 1;
char buf[Lim];
   
void Nxt () {
    if (++u == Lim)
        std::fread(buf, 1, Lim, stdin), u = 0;
}
   
void Get (int &x) {
    x = 0;
    for (; buf[u] < '0' || buf[u] > '9'; Nxt());
    for (x = 0; buf[u] >= '0' && buf[u] <= '9'; Nxt())
           x = x * 10 + buf[u] - '0';
 
}