Cod sursa(job #1026434)

Utilizator harababurelPuscas Sergiu harababurel Data 11 noiembrie 2013 17:03:56
Problema Curcubeu Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <iostream>
#include <fstream>
#include <sstream>
#include <cstring>
#define nmax 1000005
using namespace std;

bool used[nmax];
int v[nmax], urm[nmax];
int n, A[nmax], B[nmax], C[nmax], L, R, color;

string out = "";
string toString(int x) {
	stringstream ss;
	ss<<x;
	return ss.str();
}

int main() {
	ifstream f("curcubeu.in");
	ofstream g("curcubeu.out");

	f>>n;
	f>>A[1]>>B[1]>>C[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;
	}
	//for(int i=1; i<n; i++) cout<<min(A[i], B[i])<<" "<<max(A[i], B[i])<<" "<<C[i]<<"\n"; cout<<"\n";

	for(int i=1; i<n; i++) urm[i] = i;
	for(int t=n-1; t>=1; t--) {
		L = min(A[t], B[t]);
		R = max(A[t], B[t]);
		color = C[t];

		for(int i=L; i<=R; ) {
			if(used[i]) i = urm[i];
			else {
				used[i] = true;
				v[i] = color;
				urm[i] = R+1;
				i++;
			}
		}
				
		//for(int i=1; i<n; i++) cout<<v[i]<<" "; cout<<"\n";

	}
	for(int i=1; i<n; i++) out = out + toString(v[i]) + "\n";
	g<<out;

	return 0;
}