Cod sursa(job #1871957)
Utilizator | 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;
}