Cod sursa(job #2640694)

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

using namespace std;

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

stack<int> s;
vector<bool> c, dp, ds;
vector<int> v;
inline 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;
}
inline void dame(unsigned int n)
{
    int i=1;
    int nr=0;
    bool found=0;
    v.resize(n+1);
    c.resize(n+1, 0);
    dp.resize(2*n, 0);
    ds.resize(2*n, 0);
    v[1]=0;
    while(i)
    {
        int j=v[i];
        if(v[i])
            c[j]=dp[j-i+n]=ds[i+j-1]=0;
        j++;
        while(j<=n && !check(i, j, n))
            j++;
        if(j<=n)
        {
            v[i]=j;
            if(i<n)
                v[++i]=0;
            else
            {
                if(!found)
                {
                    found=1;
                    for(int t=1; t<=n; t++)
                    g<<v[t]<<' ';
                }
                nr++;
            }

        }
        else
            i--;
    }
    g<<'\n'<<nr;
}
/*inline 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();
                    }
                }
                nr++;
            }

        }
        else
            s.pop();
    }
    g<<'\n'<<nr;
}*/
int main()
{
    int n;
    f>>n;
    dame(n);
    f.close();
    g.close();
    return 0;
}