Сумма, делящаяся на три
Необходимо найти самый большой непрерывный фрагмент в массиве a1,a2...aN, сумма элементов которого делится на 3.
Входные данные
В первой строке входных данных содержится число N≤100000. Во второй строке даны N чисел, по модулю не превосходящих 109, — элементы массива.
Выходные данные
Выведите два числа — индексы начала и конца фрагмента. Если таких фрагментов несколько, то выведите фрагмент с минимальным индексом начала.
Если ответа не существует, то выведите единственное число −1.
Примеры
Ввод
5
Вывод
1 2 3 4 5
1 5
Ввод
4
1 2 3 4
Вывод
1 3
#include
#include
using namespace std;
int main () {
int n;
cin >> n;
vector a(n),s(3, -1), e(3, -1);
for (int i = 0; i < n; i++)
cin >> a[i];
int mmax = -1;
int maxlen = 0;
int m = 0;
int p = 0;
for (int i = 0; i < n; i++) {
if (s[m] < 0)
s[m] = i;
p += a[i] % 3;
m = p % 3;
if (s[m] >= 0) {
e[m] = i;
if (e[m] - s[m] + 1 > maxlen) {
maxlen = e[m] - s[m] + 1;
mmax = m;
}
}
}
if (mmax >= 0)
cout << s[mmax] + 1 << " " << e[mmax] + 1;
else
cout << mmax;
}