Cod sursa(job #2700927)

Utilizator cyg_mihaizMIHAI ZARAFIU cyg_mihaiz Data 29 ianuarie 2021 12:26:51
Problema Problema Damelor Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <fstream>
#include <algorithm>
#include <bitset>

using namespace std;
const short NMAX = 13;

ifstream fin("damesah.in");
ofstream fout("damesah.out");

bitset<2 * NMAX + 3> diag1,diag2;

int perm[NMAX + 3],n;

void reinit()
{
    int i;
    for(i = 1; i <= 2 * NMAX + 1; i++)
        diag1[i] = diag2[i] = 0;
}

bool check()
{
    int i;
    for(i=1;i<=n;i++)
    {
        if(diag1[i+perm[i]+1] or diag2[i-perm[i]+n])
            return 0;
        diag1[i+perm[i]+1]=1;
        diag2[i-perm[i]+n]=1;
    }
    return 1;
}

int main()
{
    ios_base::sync_with_stdio(false);
    fin.tie(NULL);

    bool ok = 1;
    int i,ans = 0;
    fin >> n;
    for(i = 1; i <= n; i++)
        perm[i] = i;
    do
    {
        if(check())
        {
            if(ok)
            {
                ans++;
                ok = 0;
                for(i = 1; i <= n; i++)
                    fout << perm[i] << " ";
                fout << "\n";
            }
            else
                ans++;
        }
        reinit();
    }while(next_permutation(perm + 1, perm + n + 1));
    fout << ans;
    return 0;
}