Cod sursa(job #197614)

Utilizator silvia_the_bestSilvia Pripoae silvia_the_best Data 5 iulie 2008 12:12:51
Problema Grigo Scor 10
Compilator cpp Status done
Runda Junior Challenge 2008 Marime 0.91 kb
#include <cstdio>
#include <algorithm>
using namespace std;
int v[100005],ii[100005],n,m,nr,ok;
void read(){
    int i,x;
    freopen("grigo.in","r",stdin);
    scanf("%d%d",&n,&m);
    for (i=1;i<=m;++i){
		scanf("%d",&x);
        ++ii[x];
		if (x==1)
			ok=1;
    }
    for (i=1;i<=n;++i)
         v[i]=i;
}
void solve(){
    int i,b=0,max;
    if (ok==1)
	do{
		max=0;
            b=0;
            for (i=1;i<=n;++i){
                if (v[i]>max&&ii[i]==0){
                   b=1;
                   break;
                }
                else if (v[i]<=max&&ii[i]!=0){
					b=1;
					break;
                }
                if (v[i]>max)
					max=v[i];
			}
            if (b==0)
				++nr;
    }while(next_permutation(v+1,v+n+1));
}
void write(){
     freopen("grigo.out","w",stdout);
     printf("%d\n",nr);
}
int main(){
    read();
    solve();
    write();
    return 0;
}