Cod sursa(job #197615)

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