ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1120. Сумма последовательных чисел

GOOD SOLUTION!
Послано Gerasim Petrov Velchev 9 авг 2008 00:58
#include<iostream>
#include<cmath>
using namespace std;
int sum (int a,int b) {return (!((b-a+1)%2))?(b-a+1)/2*(a+b):(b-a)/2*(a+b-1)+b;}
int main () {
int n;
cin>>n;
int a_real,p_real;
int p=(int)(sqrt((double)(n*2)));
do {
int a=(((n*2)/p-(p-1))/2);
if (a&&sum(a,a+p-1)==n) {a_real=a;p_real=p;break;}
p--;
}
while (p);
cout<<a_real<<" "<<p_real<<endl;
return 0;
}
Re: GOOD SOLUTION!
Послано Egor Stepanov [mikroz] 16 дек 2008 04:16
strange solution...
there is a simpler way.
Re: GOOD SOLUTION!
Послано S.77 3 авг 2011 21:56
//0.015 sec, 108 КiB
#include <stdio.h>
int main(void){
    unsigned n,p,s;
    scanf("%u",&n);
    for(p=44720;n<(s=(p*(p+1))>>1)||(n-s)%p;p--);
    printf("%u %u\n",1+(n-s)/p,p);
    return 0;
}
Re: GOOD SOLUTION!
Послано Artur Mazgarov 31 янв 2013 14:59
EXCELLENT! When I got it))