Pagini recente » Istoria paginii runda/simulareoni2008_9/clasament | Autentificare | Istoria paginii runda/iconcurs12/clasament | Istoria paginii runda/kkk | Cod sursa (job #264967)
Cod sursa(job #264967)
#include<stdio.h>
#include<string.h>
FILE*fin=fopen("curcubeu.in","r");
FILE*fout=fopen("curcubeu.out","w");
#define ll long long
#define nm 1000005
int a[nm],b[nm],c[nm],next[nm],ans[nm],n;
int main()
{
int i,st,dr,v;
fscanf(fin,"%d%d%d%d",&n,&a[1],&b[1],&c[1]);
for(i=2;i<n;i++)
{
a[i]=(ll)(a[i-1]*i)%n;
b[i]=(ll)(b[i-1]*i)%n;
c[i]=(ll)(c[i-1]*i)%n;
if(a[i]>b[i]) a[i]^=b[i]^=a[i]^=b[i];
}
for(i=0;i<n;i++)
next[i]=i+1;
memset(ans,0,sizeof(ans));
for(i=n-1;i>=1;i--)
{
st=a[i];
dr=b[i];
while(st<=dr)
{
if(!ans[st]) ans[st]=c[i];
v=st;
st=next[st];
if(dr>next[v]) next[v]=dr;
}
}
for(i=1;i<n;i++)
fprintf(fout,"%d\n",ans[i]);
fclose(fin);
fclose(fout);
return 0;
}