Cod sursa(job #2640686)

Utilizator HermioneMatei Hermina-Maria Hermione Data 7 august 2020 14:02:56
Problema Problema Damelor Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.73 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("damesah.in");
ofstream g("damesah.out");

stack<int> s;
vector<bool> c, dp, ds;

bool check(int i, int j, int n)
{
    if(c[j]==0 && dp[j-i+n]==0 && ds[i+j-1]==0)
    {
        c[j]=dp[j-i+n]=ds[i+j-1]=1;
        return 1;
    }
    return 0;
}
void dame(unsigned int n)
{
    int nr=0;
    bool found=0;
    c.resize(n+1, 0);
    dp.resize(2*n, 0);
    ds.resize(2*n, 0);
    s.push(0);
    while(s.size())
    {
        if(s.top())
            c[s.top()]=dp[s.top()-s.size()+n]=ds[s.size()+s.top()-1]=0;
        unsigned int j=s.top()+1;
        while(j<=n && !check(s.size(), j, n))
            j++;
        if(j<=n)
        {
            s.pop();
            s.push(j);
            if(s.size()<n)
                s.push(0);
            else
            {
                if(!found)
                {
                    found=1;
                    stack <int> sol;
                    while(s.size())
                    {
                        sol.push(s.top());
                        s.pop();
                    }
                    while(sol.size())
                    {
                        g<<sol.top()<<' ';
                        s.push(sol.top());
                        sol.pop();
                    }
                }
                //c[s.top()]=dp[s.top()-s.size()+n]=ds[s.size()+s.top()-1]=0;
                nr++;
            }

        }
        else
        {
            //c[s.top()]=dp[s.top()-s.size()+n]=ds[s.size()+s.top()-1]=0;
            s.pop();
        }
    }
    g<<'\n'<<nr;
}
int main()
{
    unsigned int n;
    f>>n;
    dame(n);
    f.close();
    g.close();
    return 0;
}