Pagini recente » Monitorul de evaluare | Monitorul de evaluare | simulusu5 | Cod sursa (job #1935844) | Cod sursa (job #466769)
Cod sursa(job #466769)
#include <cstdio>
#define pmax 600010
int p, v[pmax], sol[pmax];
int solve(int a, int b, int r, int n, int k)
{
if (a>b) return 0;
if (b-a+1<n) return 0; else
if (!n)
{
if (!r) return 1;
else return 0;
}
if (a==b)
{
if (n==1 && v[a]==r)
{
sol[k+1]=a;
return 1;
} else return 0;
}
int m=(a+b)/2, ok=0, c, d, i;
for (c=0; c<p; c++)
{
d=r-c;
if (d<0) d+=p;
for (i=0; i<=n; i++)
{
ok=solve(a, m, c, i, k);
if (ok) ok=solve(m+1, b, d, n-i, k+i);
if (ok) break;
}
if (ok) break;
}
return ok;
}
int main()
{
freopen("congr.in","r",stdin);
freopen("congr.out","w",stdout);
scanf("%d",&p);
int i;
for (i=1; i<2*p; i++)
{
scanf("%d",&v[i]);
v[i]%=p;
}
solve(1,2*p-1,0,p, 0);
for (i=1; i<=p; i++) printf("%d ",sol[i]);
}