Mai intai trebuie sa te autentifici.
Cod sursa(job #1490759)
Utilizator | Data | 24 septembrie 2015 08:37:16 | |
---|---|---|---|
Problema | Curcubeu | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.93 kb |
#include <fstream>
#include <numeric>
#include <utility>
using namespace std;
constexpr int maxn = 1000000;
int main(){
ifstream f("curcubeu.in");
ofstream g("curcubeu.out");
int n, a, b, c;
f >> n >> a >> b >> c;
int a_uri[maxn], b_uri[maxn], c_uri[maxn];
a_uri[1] = a, b_uri[1] = b, c_uri[1] = c;
for(long long i = 2; i < n; ++i){
a_uri[i] = (i * a_uri[i-1]) % n;
b_uri[i] = (i * b_uri[i-1]) % n;
c_uri[i] = (i * c_uri[i-1]) % n; }
int rez[maxn] = {}, next[maxn] = {};
iota(begin(next), end(next), 1);
for(int i = n-1; i >= 1; --i){
int st = a_uri[i], dr = b_uri[i];
if(st > dr){
swap(st, dr); }
for(int j = st, nxt; j <= dr; j = nxt){
nxt = next[j];
next[j] = max(next[j], dr+1);
if(rez[j] == 0){
rez[j] = c_uri[i]; } } }
for(int i = 1; i < n; ++i){
g << rez[i] << '\n'; }
return 0; }