Cod sursa(job #3164650)

Utilizator Manolea_Teodor_StefanManolea Teodor Stefan Manolea_Teodor_Stefan Data 3 noiembrie 2023 23:52:42
Problema Problema Damelor Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.48 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("damesah.in");
ofstream fout("damesah.out");

int n;
vector<int> arr,pnt_arr;
vector<int> ans;
bool firstTime = true;
int indx;
void solve(){
    for(int i = 1; i < pnt_arr.size(); i++){
        int ind = i;
        for(int j = 0; j < i; j++){
            if(abs(pnt_arr[i] - pnt_arr[j]) == ind)
                return;
            ind--;
        }
    }
    if(firstTime){
        firstTime=!firstTime;
        ans = pnt_arr;
    }
    indx++;
    return;
}

bool verify(){
    for(int i = 0; i < pnt_arr.size() - 1; i++)
        if(pnt_arr[i] == pnt_arr[pnt_arr.size() - 1])
            return false;
    return true;
}

void combine(){
    int mem = 0;
    bool ok;
    bool end_task = false;
    pnt_arr.push_back(0);
    while (mem>=0){
        ok = true;
        while(ok && pnt_arr[mem] < n){
            pnt_arr[mem] += 1;
            if(verify()){
                ok = false;
            }
        }
        if(!ok){
            if(pnt_arr.size() == n){
                solve();
            }
            else{
                pnt_arr.push_back(0);
                mem+=1;
            }
        }
        else{
            pnt_arr.pop_back();
            mem-=1;
        }
    }
    return;
}


int main()
{
    fin>>n;
    for(int i = 1; i <= n; i++)
        arr.push_back(i);
    combine();
    for(int i : ans)
        fout<<i<<' ';
    fout<<'\n'<<indx;
    return 0;
}