Pagini recente » Cod sursa (job #2180629) | Cod sursa (job #2761118) | Cod sursa (job #2525304) | Cod sursa (job #2722631) | Cod sursa (job #2640686)
#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;
}