Cod sursa(job #1709775)

Utilizator depevladVlad Dumitru-Popescu depevlad Data 28 mai 2016 13:49:59
Problema Consecutive Scor 0
Compilator cpp Status done
Runda ONIS 2016 - Runda - 2 - ACM ICPC Romanian Programming Contest Marime 1.16 kb
#include <fstream>
#include <algorithm>

using namespace std;

int64_t N;
vector<pair<int64_t, int64_t>> d;
vector<pair<int64_t, int64_t>> e;

int main() {
   ifstream f("consecutive.in");
   ofstream g("consecutive.out");
   
   int T;
   for(f >> T; T > 0; T--) {
      d.clear();
      e.clear();
      
      f >> N;
      
      N <<= 1;
      for(int i = 2; 1LL * i * i <= N; i++) {
         if(N % i == 0) {
            int64_t Z = N / i;
            d.push_back(make_pair(i, Z));
         }
      }
      
      for(vector<pair<int64_t, int64_t>> :: iterator it = d.begin(); it != d.end(); it++) {
         int64_t y = (it->first + it->second - 1) / 2;
         int64_t x = it->second - y;
         if(x > y) swap(x, y);
         e.push_back(make_pair(x, y));
      }
      
      sort(e.begin(), e.end(), [](pair<int64_t, int64_t> a, pair<int64_t, int64_t> b) {
           return a.second - a.first < b.second - b.first; });
           
      g << e.size() << '\n';
      for(vector<pair<int64_t, int64_t>> :: iterator it = e.begin(); it != e.end(); it++)
         g << it->first << ' ' << it->second << '\n';
   }
   
   return 0;
}