Дано два массива одинаковой длины, нужно с помощью прекрасных массивов найти любой подмассив, где сумма елементов первого равна сумме елементов второго, решить надо за O(n), заранее спасибо за помощь) если вдруг кто-то поможет :)
| № | Пользователь | Рейтинг |
|---|---|---|
| 1 | Benq | 3792 |
| 2 | VivaciousAubergine | 3647 |
| 3 | Kevin114514 | 3603 |
| 4 | jiangly | 3583 |
| 5 | strapple | 3515 |
| 6 | tourist | 3470 |
| 7 | dXqwq | 3436 |
| 8 | Radewoosh | 3415 |
| 9 | Otomachi_Una | 3413 |
| 10 | Um_nik | 3376 |
| Страны | Города | Организации | Всё → |
| № | Пользователь | Вклад |
|---|---|---|
| 1 | Qingyu | 158 |
| 2 | adamant | 152 |
| 3 | Proof_by_QED | 146 |
| 3 | Um_nik | 146 |
| 5 | Dominater069 | 144 |
| 6 | errorgorn | 141 |
| 7 | cry | 139 |
| 8 | YuukiS | 135 |
| 9 | chromate00 | 134 |
| 9 | TheScrasse | 134 |
Дано два массива одинаковой длины, нужно с помощью прекрасных массивов найти любой подмассив, где сумма елементов первого равна сумме елементов второго, решить надо за O(n), заранее спасибо за помощь) если вдруг кто-то поможет :)
| Название |
|---|



Если я правильно понял, условие звучит так: даны массивы a и b длиной n, найти любые 0 <= l <= r < n, такие, что a[l] + ... + a[r] = b[l] + ... + b[r].
В голову пришло такое решение: давайте посчитаем массив префиксных сумм для обоих массивов: prefa[i] = a[0] + ... + a[i], аналогично для prefb и b. Теперь, посчитаем разностный массив для этих двух массивов, т.е. diff[i] = prefa[i] — prefb[i].
В таком случае, если нужные l и r существуют, то diff[l — 1] = diff[r]. Значит, проверим, что в массиве diff какое-то значение встречается хотя бы два раза, если это так — можем найти ответ.
К сожалению, поскольку значения в diff могут находиться в очень большом диапазоне, я не знаю способ, как решать задачу за честную линию, но с помощью unordered_map можно решать за амортизированную линию. Надеюсь, поможет :)