Cod sursa(job #542460)

Utilizator LgregL Greg Lgreg Data 26 februarie 2011 13:55:23
Problema Sortari2 Scor 10
Compilator cpp Status done
Runda Romanian Master in Mathematics and Sciences 2011, Ziua 2 Marime 0.9 kb
#include<stdio.h>
int N,v[1000],n,a[1000],p[1010],nr;
void inter(int &x,int &y)
{
    int q;
    q=x;
    x=y;
    y=q;
}
int calc()
{
    int s=0;
    for(int i=1;i<=N;++i)
        for(int j=i+1;j<=N;++j)
            if(p[i]>p[j])
                ++s;
    return s;
}
int calc2()
{
    int s=0;
    for(int i=1;i<=N;++i)
    {
        while(p[i]!=i)
        {
            ++s;
            inter(p[i],p[p[i]]);
        }
    }
    return s;
}


void back(int k)
{
if(k==n+1)
{
 for(int i=1;i<=n;++i)
 p[i]=a[i];
 int a=calc();
 int b=calc2();

 if(a!=b)
    ++nr;
    if(nr>=999017)
        nr-=999017;
}
else
for(int i=1;i<=n;++i)
{
if(v[i]==0)
{
v[i]=1;
a[k]=i;
back(k+1);
v[i]=0;
}
}


}
int main()
{
freopen("soratri2.in","r",stdin);
freopen("sortari2.out","w",stdout);
     scanf("%d",&n);
        N=n;
     back(1);
     printf("%d\n",nr);
}