Cod sursa(job #1984250)

Utilizator AlexandruLuchianov1Alex Luchianov AlexandruLuchianov1 Data 24 mai 2017 09:30:32
Problema Curcubeu Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream in ("curcubeu.in");
ofstream out ("curcubeu.out");
struct transformation{
  int a;
  int b;
  int c;
};
int const nmax = 1000000;
transformation tr[5 + nmax];
int nxt[5 + nmax];
int v[5 + nmax];

int jump(int a){

  if(nxt[a]){
    nxt[a] = jump(nxt[a]);
    return nxt[a];
  } else
    return a;
}

void unite(int a ,int b ,int c){
  if(b < a)
    swap(a , b);
  while(a <= b){
    a = jump(a);
    if(a <= b){
      v[a] = c;
      nxt[a] = b + 1;
      a++;
    }
  }
}
int main()
{
  int n , a , b , c;
  in>>n>>a>>b>>c;
  tr[1] = {a , b , c};

  for(int i = 2 ; i < n ;i++){
    tr[i].a = (1LL * tr[i - 1].a * i) % n;
    tr[i].b = (1LL * tr[i - 1].b * i) % n;
    tr[i].c = (1LL * tr[i - 1].c * i) % n;
  }
  for(int i = n - 1 ;0 < i ;i--){
    unite(tr[i].a , tr[i].b , tr[i].c );
  }
  for(int i = 1 ; i < n ;i++){
    out<<v[i]<<'\n';
  }
  return 0;
}