Pagini recente » Cod sursa (job #2961316) | Cod sursa (job #58000) | Cod sursa (job #2618267) | Cod sursa (job #1406998) | Cod sursa (job #197687)
Cod sursa(job #197687)
#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;
}