rlicSosanex
26.08.2021 12:16

Сумма, делящаяся на три
Необходимо найти самый большой непрерывный фрагмент в массиве 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;
}

Нажмите на рекламу ниже и сразу увидите ответ
Популярные вопросы:
Ответ:
Weterotog
18.07.2020 11:32
def dijkstra(graph, node): """ Simulate the dijkstra algorithm in a graph """ distance_to = {} distance_to[node] = 0 distance_path = {} while (distance_to): # in case we have a disjoint graph op_node = min_distance(distance_to) distance_path[op_node] = distance_to[op_node] del distance_to[op_node] for x, x_len in graph[op_node].items(): if x not in distance_path: if x not in distance_to: distance_to[x] = distance_path[op_node] + x_len elif distance_to[x] > distance_path[op_node] + x_len: distance_to[x] = distance_path[op_node] + x_len return distance_path
0,0(0 оценок)
Ответ:
TheHammer
06.09.2020 01:15
Квадратное уравнение имеет вид: ах^2 + bx + c = 0. (1)здесь а, b и с – коэффициенты. сначала надо вычислить дискриминант квадратного уравненияd = (b^2 – 4ac) (2)если d > 0, то квадратное уравнение имеет два корня х1 и х2. обозначим с = корень(d). то есть надо вычислить квадратный корень из d. имеем такие решениях1 = (–b + c)/(2a) и x2 = (–b – c)/(2a). (3)если дискриминант d = 0, то c = 0 и оба корня одинаковы х1 = х2 (хотя в школе обычно говорят, что имеется только одно решение) и вычисляются по формулех1 = х2 = –b/(2a). (4). эта формула следует из формулы (3) при с = d = 0.если дискриминант d меньше нуля, то корень из d вычислить нельзя, с будет мнимым числом. вообще говоря, корни есть (2 штуки), но они будут мнимыми числами. хотя в школе учат, что в этом случае корней нет. так и будем считать, что корней нет.алгоритм решения будет следующий но только здесь дискриминант d обозначен малой буквой d
0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота