Cod sursa(job #2660484)

Utilizator cristi_macoveiMacovei Cristian cristi_macovei Data 19 octombrie 2020 16:43:09
Problema Suma si numarul divizorilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <iostream>
#include <fstream>
#include <algorithm>

const int KMAX = 3;
const int NMAX = 9;
std::ofstream out("bilete.out");

int n, k;
std::pair<int, int> sol[1 + KMAX], flipped[1 + NMAX];

void read() {
  std::ifstream in ("bilete.in");

  in >> n >> k;

  in.close();
}

void back(int step) {
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= n; ++j) {
      if (10 * i + j > 10 * sol[step - 1].first + sol[step - 1].second) {
        sol[step] = {i, j};
        if (step == k) {

          for (int ii = 1; ii <= k; ++ii)
            flipped[ii] = {sol[ii].first, n - sol[ii].second + 1};
          std::sort(flipped + 1, flipped + k + 1);

          bool show = true;
          for (int ii = 1; ii <= k; ++ii) {
            if (sol[ii] < flipped[ii]) {
              show = true;
              break;
            } else if (sol[ii] > flipped[ii]) {
              show = false;
              break;
            }
          }

          if (show) {
            for (int ii = 1; ii <= k; ++ii)
              out << sol[ii].first << sol[ii].second;
            out << '\n';
          }
        } else
          back(step + 1);
      }
    }
  }
}

int main() {
  read();
  back(1);
  return 0;
}