Cod sursa(job #1709010)

Utilizator alexandra_udristoiuUdristoiu Alexandra Maria alexandra_udristoiu Data 28 mai 2016 10:34:06
Problema Consecutive Scor 100
Compilator cpp Status done
Runda ONIS 2016 - Runda - 2 - ACM ICPC Romanian Programming Contest Marime 1.11 kb
#include<fstream>
using namespace std;
int t, n, i, x, nr, st, dr, mid;
pair<int, int> sol[30000];
long long y;
ifstream fin("consecutive.in");
ofstream fout("consecutive.out");
int main(){
    fin>> t;
    for(; t; t--){
        fin>> n;
        nr = 0;
        st = 1;
        dr = n;
        while(st <= dr){
            mid = (st + dr) / 2;
            y = mid * 1LL * (mid + 1) / 2;
            if(y > n){
                dr = mid - 1;
            }
            else{
                st = mid + 1;
            }
        }
        for(i = 2; i <= dr; i++){
            if(i % 2 == 0){
               x = n - i / 2 * (i - 1);
            }
            else{
                x = n - (i - 1) / 2 * i;
            }
            if(x <= 0){
                break;
            }
            if(x % i == 0){
                nr++;
                sol[nr].first = x / i;
                sol[nr].second = sol[nr].first + i - 1;
            }
        }
        fout<< nr <<"\n";
        for(i = 1; i <= nr; i++){
            fout<< sol[i].first <<" "<< sol[i].second <<"\n";
        }
    }
}