Pagini recente » Cod sursa (job #1469612) | Cod sursa (job #185762) | Cod sursa (job #2511748) | Cod sursa (job #516805) | Cod sursa (job #1458259)
#include <fstream>
#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
#include <unordered_set>
using namespace std;
bool check(const vector<int>& v){
vector<bool> a(2*v.size(), false), b(2*v.size(), false);
for(int i = 0; i < v.size(); ++i){
const int pa = v[i]-i + v.size() - 1,
pb = v[i] + i;
if(a[pa] || b[pb]){
return false; }
a[pa] = true;
b[pb] = true; }
return true; }
int main(){
ifstream f("damesah.in");
ofstream g("damesah.out");
int n = 0;
f >> n;
vector<int> sol(n);
int num_sol = 0;
iota(begin(sol), end(sol), 0);
do{
if(check(sol)){
++num_sol;
if(num_sol == 1){
for(const auto x : sol){
g << (x+1) << ' '; }
g << '\n'; } }
} while(next_permutation(begin(sol), end(sol)));
g << num_sol;
return 0; }