Cod sursa(job #1871957)

Utilizator isav_costinVlad Costin Andrei isav_costin Data 7 februarie 2017 19:52:57
Problema Problema Damelor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.66 kb
#include <cstdio>
#include <cstring>
#include <algorithm>

int v[15], d1[25], d2[25], atac, f;

using namespace std;

int main()
{
    freopen( "damesah.in", "r", stdin );
    freopen( "damesah.out", "w", stdout );

    int n, i;

    scanf( "%d", &n );

    for( i=1;i<=n;i++ )
        v[i]=i;

    do
    {
        memset(d1,0,sizeof(d1));
        memset(d2,0,sizeof(d2));
        atac=0;

        for( i=1;i<=n && !atac;i++ )
        {
            if( i==v[i] )
            {
                d1[0]++;

                if( d1[0]>1 )
                    atac=1;
            }

            if( i<v[i] )
            {
                d1[n+v[i]-i]++;

                if( d1[n+v[i]-i]>1 )
                    atac=1;
            }

            if( i>v[i] )
            {
                d1[i-v[i]]++;

                if( d1[i-v[i]]>1 )
                    atac=1;
            }

            if( i==n-v[i]+1 )
            {
                d2[0]++;

                if( d2[0]>1 )
                    atac=1;
            }

            if( i<n-v[i]+1 )
            {
                d2[2*n-v[i]-i+1]++;

                if( d2[2*n-v[i]-i+1]>1 )
                    atac=1;
            }

            if( i>n-v[i]+1 )
            {
                d2[i+v[i]-n-1]++;

                if( d2[i+v[i]-n-1]>1 )
                    atac=1;
            }
        }

        if( !atac )
        {
            f++;

            if( f==1 )
                for( i=1;i<=n;i++ )
                    printf( "%d ", v[i] );
        }
    }
    while( next_permutation(v+1,v+n+1) );

    printf( "\n%d", f );

    return 0;
}