1

(4 ответов, оставленных в Problems)

Спасибо, идея отличная. Конечно, должен был сам до такого додуматься. Дерзну придраться маленько.
Вот эта строка:

long long st = n/sq;

и обе вот эти:

if (n/l == n/(l+1)) return l;

не нужны и вовсе. И тогда твой код - еще более короткое решение smile Еще раз спасибо.

2

(4 ответов, оставленных в Problems)

Условие:
Банда из k зайцев совершила разбойный налёт на склад с капустой и похитила n кочанов. Лиса в это время пробегала мимо и предложила им поделить награбленную капусту поровну между всеми членами банды. Зайцы согласились, условившись с лисой, что всем зайцам достанется одинаковое количество кочанов капусты, а остаток размером менее k кочанов лиса сможет забрать себе как плату за эту услугу.
Между тем, при разделе капусты к банде присоединился один заяц, который не принимал участия в налёте. Он получил ровно такую же долю, как и члены банды, однако остался незамеченным. «Почему?» — спросите вы. Дело в том, что каждый заяц получил такое же количество кочанов капусты, какое получил бы, если бы самозванец при разделе не присутствовал. Найдите минимальное количество зайцев в банде, при котором такое могло произойти.
Исходные данные:
Входные данные состоят из нескольких тестов. Первая строка содержит количество тестов t, 1 ? t ? 30000. В каждой из следующих t строк записано целое число n, 1 ? n ? 10^18.
Результат:
Для каждого теста выведите в отдельной строке целое число k — минимально возможное количество зайцев в банде.

Уже достаточно давно думаю над этой задачей. Мат. модель очевидна, нужно найти такое k, что n / k = n / (k + 1). Подключил всю команду, никаких результатов. Где-то слышал, что существует формула, от которой достаточно пройтись в две стороны на небольшое количество шагов. Где-то слышал, что надо что-то колдовать с функцией F(x) = [n/x] - [n/(x + 1)]. Но ни одну из идей развить не удалось.
На каком-то из форумов видел сообщение e-maxx'a о решении какого-то псевдоквадратного уравнения, но и это мне, конечно же, не помогло.
P.S. Если идти от корня и тупо проверять, то решение очевидно получит TLE, ведь при больших N количество шагов будет порядка нескольких десятков тысяч.

3

(7 ответов, оставленных в Feedback)

Отличный сайт. Много полезной и, главное, редкой информации. Надеюсь проект и дальше будет процветать.  Очень удобно, что есть русскоязычное описание алгоритма с доказательством, а под ним и реализация.
Спасибо автору, успехов в развитии проекта.

4

(10 ответов, оставленных в Offtopic)

MS Windows Vista (дома), MS Windows XP (универ)
Microsoft Visual Studio 2005, 2008 (дома оба, в универе какой попадется)
Microsoft C++ Compiler

5

(21 ответов, оставленных в Problems)

Странно, что эту задачу предложили на области в этом году. Она же вроде была в 2007 (+-1 год) году предложена на хорватском COCI. Называлась Pravokutni вроде. И вот там-то как раз были ограничения N от 1 до 1500. В авторском разборе три решения N^2*logN. Ну если так подумать, то такая асимптотика даст 3*10^8 операций в худшем случае (он даже и недостижим). На полуфинале такое количество операций над целыми проходило за 1 секунду.