Cod sursa(job #1916716)

Utilizator Harsan_SabinHarsan Sabin Harsan_Sabin Data 9 martie 2017 10:13:13
Problema Problema Damelor Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <cstdio>
#include <cstdlib>

using namespace std;
FILE* fin=fopen("damesah.in","r");
FILE* fout=fopen("damesah.out","w");

int n,v[20],nr,mij,aux;
void Tipar()
{
    for(int j=1;j<=n;++j)
        fprintf(fout,"%d ",v[j]);
    fprintf(fout,"\n");
}
int Valid(int i)
{
    int dif=0;
    for(int j=1;j<i;++j)
    {
        if(v[i]==v[j])
            return 0;
        dif=i-j;
        if(v[i]==v[j]-dif||v[i]==v[j]+dif)
            return 0;
    }
    return 1;
}
void Back(int i)
{
    if(v[1]==mij&&aux==0)
        aux=nr;
    if(v[1]>mij)
    {
        if(n%2==0)
        {
            nr*=2;
            fprintf(fout,"%d",nr);
        }
        else
        {
            nr=nr-aux;
            aux*=2;
            fprintf(fout,"%d",aux+nr);
        }
        exit(0);
    }
    else
    {
        if(i>n)
        {
            if(nr==0)
                Tipar();
            nr++;
        }
        else
            for(int j=1;j<=n;++j)
            {
                v[i]=j;
                if(Valid(i))
                    Back(i+1);
            }
    }
}
int main()
{
    fscanf(fin,"%i",&n);
    mij=n/2;
    if(n%2==1)
        ++mij;
    Back(1);
    fprintf(fout,"%d",nr);
    return 0;
}