Cod sursa(job #1173183)

Utilizator IonMosnoiIon Mosnoi IonMosnoi Data 18 aprilie 2014 20:40:18
Problema Generare de permutari Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include<stdio.h>
using namespace std;

long a[1004];
int n,sol=0,b[1004];

int find(int x,int l=1,int r=n){
	int m = (l+r)/2;
	if(a[m]==x)return m;
	if(x>a[m])return find(x,m+1,n);
	else return find(x,1,m);
}
int pred(int x){
	int rs=0;
	for(int i=1;i<x;i++)
	 if(b[i]!=1)rs++;
	 return rs;
}
long fac(int x){
	int p = 1;
	for(int i=1;i<=x;i++)p*=i;
	return p;
}

int main(){
	freopen("perm3.in","r",stdin);
	freopen("permutari.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
	}
	long x;
	int poz,nr=n,in;
	for(int i=1;i<=n;i++){
		scanf("%d",&x);
		poz = find(x);
		
		b[poz]=1;
		in=pred(poz);
	//	printf("%d\n",in);
		sol+=in*fac(nr-1);
		nr--;
	}
	printf("%d",sol+1);
}