Pagini recente » Cod sursa (job #423675) | Cod sursa (job #118120) | Cod sursa (job #2667465) | Cod sursa (job #429200) | Cod sursa (job #938921)
Cod sursa(job #938921)
#include <fstream>
#define Nmax 1000000
#define In "curcubeu.in"
#define Out "curcubeu.out"
#define max(a,b) (((a)>=(b))?(a):(b))
#define min(a,b) (((a)<=(b))?(a):(b))
using namespace std;
int a[Nmax],b[Nmax],c[Nmax],next[Nmax],n,sol[Nmax];
inline void Citire()
{
ifstream f(In);
f>>n>>a[1]>>b[1]>>c[1];
f.close();
next[1] = 1;
for(int i=2;i<n;i++)
{
next[i] = i;
a[i] = (a[i-1]*i*1LL) % n;
b[i] = (b[i-1]*i*1LL) % n;
c[i] = (c[i-1]*i*1LL) % n;
}
}
inline void Rezolvare()
{
int start,stop,i,j;
for(i=n-1;i;i--)
{
start = min(a[i],b[i]);
stop = max(a[i],b[i]);
for(j=start;j<=stop;)
{
while(next[j]!=j && j<=stop) j = next[j];//trecem peste elementele deja acoperite
if(j>stop)
break;
sol[j] = c[i];
next[j] = stop+1;
j++;
}
}
}
inline void Afisare()
{
int i;
ofstream g(Out);
for(i=1;i<n;i++)
g<<sol[i]<<"\n";
g.close();
}
int main()
{
Citire();
Rezolvare();
Afisare();
return 0;
}