Pagini recente » Cod sursa (job #48087) | Cod sursa (job #236169) | Cod sursa (job #2533722) | Cod sursa (job #2834772) | Cod sursa (job #1172143)
#include <fstream>
#define Nmax 1000100
#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]*1LL*i) % n;
b[i] = (b[i-1]*1LL*i) % n;
c[i] = (c[i-1]*1LL*i) % 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()
{
ofstream g(Out);
for(int i=1;i<n;i++)
g<<sol[i]<<"\n";
g.close();
}
int main()
{
Citire();
Rezolvare();
Afisare();
return 0;
}