Pagini recente » Cod sursa (job #1491356) | Cod sursa (job #798738) | Istoria paginii preoni-2007/runda-3/10 | Cod sursa (job #3247598) | Cod sursa (job #85519)
Cod sursa(job #85519)
#include <stdio.h>
#include <string>
#define maxn 1000010
#define min(a,b) (a < b ? a : b)
#define max(a,b) (a > b ? a : b)
int n,x,y,z,l;
int a[maxn],b[maxn],c[maxn],next[maxn],s[maxn];
inline int drum(int x)
{
int y=x,aux;
for (;s[x];x=next[x]);
for (;s[y];)
{
aux=y;
y=next[y];
next[aux]=x;
}
return x;
}
int main()
{
freopen("curcubeu.in","r",stdin);
freopen("curcubeu.out","w",stdout);
scanf("%d %d %d %d ",&n,&a[1],&b[1],&c[1]);
int i,j;
for (i=2;i<n;i++) a[i]=(1LL*a[i-1]*i)%n,b[i]=(1LL*b[i-1]*i)%n,c[i]=(1LL*c[i-1]*i)%n;
for (i=1;i<=n;i++) next[i]=i+1;
for (i=n-1;i>0;i--)
{
if (a[i]<b[i]) x=a[i],y=b[i];
else x=b[i],y=a[i];
if (s[x]==0) s[x]=c[i];
for (j=drum(x);j<=y;j=z)
{
s[j]=c[i];
z=drum(j);
next[j]=next[y];
}
next[x]=next[y];
}
for (i=1;i<n;i++) printf("%d\n",s[i]);
return 0;
}