Разве оба эти условия не одинаковы? - PullRequest
2 голосов
/ 06 апреля 2020

Я решаю эту проблему для начинающих на Codeforces, молодой физик. https://codeforces.com/problemset/problem/69/A

Ответ заключается в том, чтобы выяснить, находятся ли 3 силы в равновесии.

Я отправил две версии своих ответов. Один прошел, а другой нет. Но я не могу понять, почему это не пройдет, не так ли оба условия?

if (sumx == 0 && sumy == 0 && sumz == 0)
    cout << "YES" << "\n";
else
    cout << "NO" << "\n";

выше - это то, что прошло.

if (sumx + sumy + sumz == 0)
    cout << "YES" << "\n";
else
    cout << "NO" << "\n";

это тот, который не прошел.

Ответы [ 2 ]

7 голосов
/ 06 апреля 2020

Рассмотрим sumx = -1, sumy = 1, sumz = 0. Существует 2-мерная бесконечность решений для x + y + z = 0, а x = y = z = 0 - это просто 0-мерная особенность.

Если вы построите график x + y + z = 0, вы получите это:

a plane representing the solutions

Каждая точка на этой плоскости представляет собой набор из трех значений, которые дают вам 0 из их суммы. Точка, где все три равны нулю, - это просто одна точка из моря. Быстрая проверка, которая говорит вам, что вы слишком упростили ограничение, состоит в том, что у вас есть 3 переменные, но только 1 уравнение. Это означает, что у вас все еще должно быть 3 - 1 = 2 измерения свободы, но одна точка имеет 0 измерений свободы.

1 голос
/ 06 апреля 2020

Ответ - нет. Когда у вас есть sumx + sumy + sumz == 0, это не обязательно означает, что все эти переменные равны 0. Предположим, что sumx = -1, sumy = 0, symz = 1. Это:

if (sumx == 0 && sumy == 0 && sumz == 0)
    cout << "YES" << "\n";
else
    cout << "NO" << "\n";

выходы NO, но это:

if (sumx + sumy + sumz == 0)
    cout << "YES" << "\n";
else
    cout << "NO" << "\n";

выходы YES.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...