Проблема с вашим кодом заключается в том, что вы используете тип int
для sum
, максимальное значение которого (1E11
) может превышать верхний предел int
(если он 32-битный или меньше). Для хранения суммы используйте long long
(по крайней мере, 64-битный).
Ну, вы также можете оптимизировать код, потому что вам точно не нужен массив 100000
целых чисел и хранить в нем значения . Вы можете сделать это, используя только две переменные.
Вот модифицированная реализация вашего logi c:
#include <iostream>
int main() {
int t, n, first, second;
long long sum; // or better use std::int_fast64_t sum;
std::cin >> t;
while (t--) {
sum = 0;
std::cin >> n >> first;
for (int i = 0; i < n - 1; ++i) {
std::cin >> second;
sum += std::abs(first - second) - 1;
first = second;
}
std::cout << sum << std::endl;
}
}
PS: В конкурентном кодировании проверка предоставленных ограничений, таких как if(a[j]!=a[j+1])
, бесполезный. Постановка задачи просто гарантирует, что это никогда не будет false
.