Cod sursa(job #197687)

Utilizator CezarMocanCezar Mocan CezarMocan Data 5 iulie 2008 13:54:33
Problema Grigo Scor 0
Compilator cpp Status done
Runda Junior Challenge 2008 Marime 1.45 kb
#include <cstdio>
#include <cstring>

using namespace std;

long rez,n,i,j,v[100010],m,s[100010],nr,mic[100100], mare[100100],l[100100],u[100100],mx[100100];

void back(long k)
    {
    long i,j,ok,p;
    if (k==n)
        {
        p=0;
        memset(mx,0,sizeof(mx));
        for (i=1;i<=n;i++)
            {
            if (s[i]>p)
                {
                p=s[i];
                mx[0]++;
                mx[mx[0]]=i;    
                }
            }    
        ok=1;
        for (i=1;i<=m;i++)
            if (mx[i]!=v[i])
                {
                ok=0;    
                break;
                }
        if (m!=mx[0])
            ok=0;
        rez+=ok;
        }
    else
        {
        for (i=1;i<=n;i++)  
            {
            ok=1;
            for (j=1;j<=k;j++)
                if (s[j]==i)
                    {
                    ok=0;
                    break;    
                    }
            if (ok)
                {
                s[k+1]=i;
                back(k+1);    
                }
            }    
        }    
    }

int main(){
freopen("grigo.in","r",stdin);
freopen("grigo.out","w",stdout);
scanf("%d%d",&n,&m);
for (i=1;i<=m;i++)
    scanf("%d",&v[i]);
/*for (i=1;i<=m;i++)
    {
    mic[i]=i-1;
    mic[i]=mare[i]+(v[i+1]-v[i]-1);
    mare[i]=m-i;
    l[i]=mic[i]+1;
    u[i]=n-mare[i];
    }
*/
back(0);
printf("%d\n",rez);
return 0;    
}