Блог пользователя kvk1920

Автор kvk1920, история, 8 лет назад, По-русски

Столкнулся недавно с такой вот проблемой:

int r, n, R; unsigned long long H; ... r = min(R, int((H * H + H * r) % n));

Неправильный ответ

int r, n, R; unsigned long long H; ... int tmp = (H * H + H * r) % n; r = min(R, tmp);

Полное решение

чем отличаются эти два куска кода?

  • Проголосовать: нравится
  • +5
  • Проголосовать: не нравится

»
8 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Мне кажется в функции min, max надо использовать однотипные переменные.

  • »
    »
    8 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    да, иначе и не получится. но я ведь привожу к одному типу.

    int a; unsigned long long b; min(a, int(b));

    ввобще еть предположение, unsigned в signed как-то криво преобразуется

»
8 лет назад, # |
  Проголосовать: нравится -42 Проголосовать: не нравится

То ли лыжи плохие, то ли ты ебанутый

»
8 лет назад, # |
  Проголосовать: нравится +13 Проголосовать: не нравится

Эти два куска кода ничем не отличается. Проблема кроется в следующей строке. R = max(R, (int) ((H * H + H * r) % n)); Ты используешь переменную r, которую только что поменял.

Пожалуйста, прикладывай ссылки на полные исходники.