Cod sursa(job #1709007)

Utilizator PlayHPPet Rescue PlayHP Data 28 mai 2016 10:33:26
Problema Consecutive Scor 100
Compilator cpp Status done
Runda ONIS 2016 - Runda - 2 - ACM ICPC Romanian Programming Contest Marime 1.46 kb
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
pair<int,int> solution[50000];
#define dim (1<<21)
#define margin 100
char buffer[dim];
char* position;
void initialize(){
  position=buffer;
}
void dump(){
  *position=0;
  printf("%s",buffer);
  initialize();
}
void print(int number){
  char* start=position;
  if(number==0){
    *position='0';
    position++;
  }
  while(number>0){
    *position=number%10+'0';
    number/=10;
    position++;
  }
  reverse(start,position);
  if(position-buffer+margin > dim)
      dump();
}
void print(char ch){
  *position=ch;
  position++;
  if(position-buffer+margin > dim)
    dump();
}
int main(){
    freopen("consecutive.in","r",stdin);
    freopen("consecutive.out","w",stdout);
    int tests,test,i,solutionCount;
    long long n,l,x,x0;
    scanf("%d",&tests);
    initialize();
    for(test=1;test<=tests;test++){
        scanf("%lld",&n);
        solutionCount=0;
        for(l=2;l*(l-1)/2<n;l++){
            x=(n-l*(l-1)/2);
            x0=x/l;
            if(x0*l==x){
                solutionCount++;
                solution[solutionCount]=make_pair(x0,x0+l-1);
            }
        }
        print(solutionCount);
        print('\n');
        for(i=1;i<=solutionCount;i++){
            print(solution[i].first);
            print(' ');
            print(solution[i].second);
            print('\n');
        }
    }
    dump();
    return 0;
}