Cod sursa(job #542309)

Utilizator andrei.dAndrei Diaconeasa andrei.d Data 26 februarie 2011 11:13:58
Problema Sortari2 Scor 10
Compilator cpp Status done
Runda Romanian Master in Mathematics and Sciences 2011, Ziua 2 Marime 0.84 kb
#include <cstdio>

#define file_in "sortari2.in"
#define file_out "sortari2.out"

int n,ans;
int p[100];
int viz[100];

inline int max(int a, int b) { return a>b?a:b; }

void back(int k){
	
	int i,j,nr,nr1,nr2;
	
	if (k==n+1){
		
		nr=nr1=nr2=0;
		for (i=1;i<=n;++i)
			 for (j=i;j<=n;++j)
				  if (p[i]>p[j]) nr++;
		for (i=1;i<=n;++i)
             if (p[i]>=i) nr1++;
                     else nr2++;
	
		if (max(nr1,nr2)<nr) ans++;	  
		//for (i=1;i<=n;++i) printf("%d ", p[i]);
		//printf("\n");}
				  //printf("%d %d\n", nr,max(nr1,nr2));
	}
	
	for (i=1;i<=n;++i)
		 if (!viz[i]){
			 viz[i]=1;
			 p[k]=i;
			 back(k+1);
			 viz[i]=0;
		 }
}

int main(){
	
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	scanf("%d", &n);
	
	ans=0;
	back(1);
	
	printf("%d\n", ans);
	
	return 0;
	
}