Cod sursa(job #1458259)

Utilizator tamionvTamio Vesa Nakajima tamionv Data 7 iulie 2015 11:13:10
Problema Problema Damelor Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#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; }