1

Тема: TopCoder SRM 449

250 DIV2

Линк задачи :
http://www.topcoder.com/stat?c=problem_ … p;rd=13903

Решение

class MountainRoad{
public :
  double findDistance(vector <int> a, vector <int> b){
    double s = *max_element(b.begin(),b.end()) - *min_element(a.begin(),a.end());
    s *= sqrt(2.0);
    return s;
  }
};

Проходит систем тест.
Люди, почему? : )

500 DIV 2

Линк :
http://www.topcoder.com/stat?c=problem_ … p;rd=13903

Решение реккурентное

if (x % 2 == 0) k = ((x + 1)/2)^2
else k = (x/2)^2
f(x) = f(x/2) + k

hokage объяснил
A couple of observations:
1. When x is odd, f(x) = x. (Since x times 1 = x)
2. When x is even, the greatest odd divisor of x is the number formed by truncating trailing 0's in the binary representation of x.
For instance, if x = 12(1100), f(x) = 3(11); if x = 20(10100), f(x) = 5(101).
This is because every even number can be written as product of an odd number and a power of 2(2, 4, 8,...)
3. 1 + 3 + 5 + ... + (2n - 1) = n^2

Однако, непонятно как мы находим k, и почему алгоритм правильный..

Помогите плз разобраться : )

2

Re: TopCoder SRM 449

P.S. буду очень благодарен тому, кто нормально сформулирует условие 250 DIV2.

3

Re: TopCoder SRM 449

в 250 поверните мысленно картинку на 45 градусов против часовой стрелки.
тогда весь путь будет состоять из горизонтальных и вертикальных отрезков, причем только вверх в вправо.
понятно, что длина такого пути определяетя однозначно изходя из начальной и конечной точек.

в 500 я не понял зачем нужна рекурсия, ведь и без нее решения очевидное:

long long findSum( long long N ) {
    long long res=0;
    while (N){
        res += ((N+1)/2)*((N+1)/2);
        N /= 2;
    }
    return res;
}

4

Re: TopCoder SRM 449

насчет 250
а если тест такой :
{0, 6}
{4, 12}

ответ ведь будет неверный!
или я не понимаю условие..

5

Re: TopCoder SRM 449

в 500 я не понял зачем нужна рекурсия, ведь и без нее решения очевидное:

а почему код правильный?)

6

Re: TopCoder SRM 449

250: там есть строчеа в условии про то что кусок из треугольников связный, т.е. такой тест неверный

500:
сколько нечетных чисел не больше N?
(N+1)/2
чему равно сумма первых K нечетных чисел? K*K
выкинем все нечетные что осталось?
N/2 четных от 2, 4, ...
если мы каждое из них разделим на 2, то во-первых ответ не изменится,
а во вторых мы получим изначальную задачу только в два раза меньшего размера

7

Re: TopCoder SRM 449

250

спасибо, действительно, плохо читал(
тогда можно мысленно "надуть" многоугольник, получившийся пересечением треугольников и получится как раз равнобедренный прямоугольный треугольник. спасибо! : ))

500

красиво, спасибо, разобрался!