Дано два массива одинаковой длины, нужно с помощью прекрасных массивов найти любой подмассив, где сумма елементов первого равна сумме елементов второго, решить надо за O(n), заранее спасибо за помощь) если вдруг кто-то поможет :)
Дано два массива одинаковой длины, нужно с помощью прекрасных массивов найти любой подмассив, где сумма елементов первого равна сумме елементов второго, решить надо за O(n), заранее спасибо за помощь) если вдруг кто-то поможет :)
| № | Пользователь | Рейтинг |
|---|---|---|
| 1 | jiangly | 3810 |
| 2 | Benq | 3676 |
| 3 | Kevin114514 | 3655 |
| 4 | maroonrk | 3463 |
| 5 | strapple | 3447 |
| 6 | Um_nik | 3387 |
| 7 | heuristica | 3322 |
| 8 | turmax | 3317 |
| 9 | tourist | 3307 |
| 10 | jiangbowen | 3291 |
| Страны | Города | Организации | Всё → |
| № | Пользователь | Вклад |
|---|---|---|
| 1 | Qingyu | 155 |
| 2 | nik_exists | 150 |
| 2 | maspy | 150 |
| 4 | Um_nik | 143 |
| 5 | Errichto | 139 |
| 6 | adamant | 137 |
| 7 | AmShZ | 136 |
| 8 | BledDest | 132 |
| 9 | maroonrk | 131 |
| 10 | qwexd | 129 |
| Название |
|---|



Если я правильно понял, условие звучит так: даны массивы 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 можно решать за амортизированную линию. Надеюсь, поможет :)