Cod sursa(job #2517470)

Utilizator rapunzelMihnea Andreescu rapunzel Data 3 ianuarie 2020 16:58:27
Problema Consecutive Scor 100
Compilator cpp-64 Status done
Runda Arhiva ICPC Marime 1.17 kb
/// orz tourist
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>

using namespace std;

long long get_x(long long n, long long l) {
  long long val = 2LL * n / l - l + 1;
  if (val % 2) {
    return -1;
  }
  val /= 2;
  if (val >= 1) {
    return val;
  } else {
    return -1;
  }
}

void print(long long n, vector<long long> sol) {
  for (auto &len : sol) {
    long long l = get_x(n, len), r = l + len - 1;
    printf("%d %d\n", l, r);
  }
}

int32_t main() {
  freopen ("consecutive.in", "r", stdin);
  freopen ("consecutive.out", "w", stdout);

  long long t;
  scanf("%d", &t);
  while (t--) {
    vector<long long> sol, rev;
    long long n;
    scanf("%d", &n);
    long long val = 2 * n;
    for (long long i = 1; i * i <= val; i++) {
      if (val % i == 0) {
        if (i > 1 && get_x(n, i) != -1) {
          sol.push_back(i);
        }
        if (i * i != val && get_x(n, val / i) != -1) {
          rev.push_back(val / i);
        }
      }
    }
    printf("%d\n", (long long) sol.size() + (long long) rev.size());
    reverse(rev.begin(), rev.end());
    print(n, sol);
    print(n, rev);
  }

}