Cod sursa(job #466769)

Utilizator antoanelaAntoanela Siminiuc antoanela Data 27 iunie 2010 14:35:12
Problema Congr Scor 10
Compilator cpp Status done
Runda Stelele Informaticii 2010, clasele X-XII, Ziua 1 Marime 1 kb
#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]);
}