0 / 0 / 0
Регистрация: 12.05.2022
Сообщений: 67

Найти самый большой непрерывный фрагмент в массиве, сумма элементов которого делится на 3

16.08.2022, 13:55. Показов 8542. Ответов 35
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Условие самой задачки:
Сумма, делящаяся на три
Необходимо найти самый большой непрерывный фрагмент в массиве a1,a2...aN, сумма элементов которого делится на 3.

Входные данные

В первой строке входных данных содержится число N⩽100000. Во второй строке даны N чисел, по модулю не превосходящих 109, — элементы массива.

Выходные данные

Выведите два числа — индексы начала и конца фрагмента. Если таких фрагментов несколько, то выведите фрагмент с минимальным индексом начала.

Если ответа не существует, то выведите единственное число −1.
В целом мой код готов,но надо добавит элемент чтобы смещался и i и j.Вот думаю может использовать свойства остатков или можно обойтись без этого.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin >> n;
 
    vector<int> a(n);
    for (int i = 0; i < n; i++)
    {
        cin >> a[i];
    }
    vector<int> p(n + 1);
    p[0] = 0;
    for (int i = 1; i <= n; ++i)
    {
        p[i] = p[i - 1] + a[i - 1];
    }
    int ibest = 0;
    int jbest = 0;
    int imin = 0;
    for (int j = 1; j < n; ++j)
    {
        
        if ((p[j + 1] - p[imin]) % 3 == 0)
        {
            jbest = j;
            ibest = imin;
            cout << ibest << " " << jbest << endl;
            return 0;
        }
    }
    cout << 1;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.08.2022, 13:55
Ответы с готовыми решениями:

Найти самый большой непрерывный фрагмент массива сумма элементов которого делится на 3
пишет, что программа использует слишком много памяти, помогите исправить Сумма, делящаяся на три Необходимо найти самый большой...

В массиве целых чисел найти непрерывный подмассив, сумма элементов которого максимальна
В массиве целых чисел найти непрерывный подмассив, сумма элементов которого максимальна. Необходимо вывести получившуюся сумму и два...

Найти в массиве непрерывный участок из 10 элементов, сумма которых максимальна
Помогите пожалуйста, нужно объявить массив целых чисел и заполнить его случайными значениями (диапазон значений: ). Найти непрерывный...

35
0 / 0 / 0
Регистрация: 12.05.2022
Сообщений: 67
17.08.2022, 18:15  [ТС]
Студворк — интернет-сервис помощи студентам
понял,спасибо большое
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13239 / 6871 / 1827
Регистрация: 18.10.2014
Сообщений: 17,416
17.08.2022, 18:55
Цитата Сообщение от Rezu Посмотреть сообщение
Хах,почему то проходит только 7 тестов из 15
Во-первых, в теме по ссылке ТС ясно сообщил, что пришлось заменить тип int на long long, ибо у ТС в одном (!) тесте возникало арифметическое переполнение. Но у него был диапазон входных данных до 109 по модулю, а у вас - всего до 109. Поэтому в вашем случае переполнение (да еще в стольких тестах!) маловероятно.

Во-вторых, "проходит только 7 тестов из 15"? Не верю. Сравнение с брутфосинговым решением на большом наборе тестов не находит никаких различий. Вы что-то выдумываете.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6767 / 3126 / 1065
Регистрация: 01.06.2021
Сообщений: 12,102
17.08.2022, 19:47
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Но у него был диапазон входных данных до 109 по модулю, а у вас - всего до 109.
никаких 109 нет, это сайт при цитировании и копировании превращает 10^9 в 109, если не пользоваться символом ^, а вместо 9 писать ⁹

Добавлено через 48 секунд
TheCalligrapher, вот я цитировал ваш текст, сам ничего не набирал, а теперь вижу, что число превратилось в 109
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13239 / 6871 / 1827
Регистрация: 18.10.2014
Сообщений: 17,416
17.08.2022, 19:50
Цитата Сообщение от Royal_X Посмотреть сообщение
икаких 109 нет, это сайт при цитировании и копировании превращает 10^9 в 109, если не пользоваться символом ^, а вместо 9 писать ⁹
Нет, нет, нет. Что там и как кто-то во что-то "превращает" тут никому не интересно. В этой теме диапазон входных данных по модулю не превосходит 109, именно так, как написано в вопросе. Ни о каких 10^9 речи здесь не идет.

(И это не сайт что-то во что-то "превращает". Это автор вопроса "превращает". Не надо сваливать на сайт лень, безалаберность и косяки автора вопроса.)
2
0 / 0 / 0
Регистрация: 12.05.2022
Сообщений: 67
17.08.2022, 20:44  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Вы что-то выдумываете
Да нет,и вправду так,смысл мне что-то выдумывать
0
17.08.2022, 21:21

Не по теме:

Цитата Сообщение от Rezu Посмотреть сообщение
Да нет,и вправду так,смысл мне что-то выдумывать
Смысла что-то выдумывать здесь никогда нет. Тем не менее, выдумывают много и часто. Такова се ля ви.

Так что, еще раз: вы что-то выдумываете.

0
738 / 705 / 110
Регистрация: 29.05.2015
Сообщений: 4,362
17.08.2022, 23:26
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
В этой теме диапазон входных данных по модулю не превосходит 109, именно так, как написано в вопросе. Ни о каких 10^9 речи здесь не идет.
А почему именно 109, а не круглое число 100 или там 1000? Откуда такая странная фантазия составителей задания?

И, кстати, ваш код правильно работает и с большими числами размером плюс-минус 109 и количеством 100000 штук - как в задании. Я проверил.
0
 Аватар для programmer_08
687 / 444 / 209
Регистрация: 18.10.2020
Сообщений: 1,606
18.08.2022, 00:30
alexu_007, ну может быть там в тестах ограничение по времени...
0
738 / 705 / 110
Регистрация: 29.05.2015
Сообщений: 4,362
18.08.2022, 07:34
Ну в общем то уже понятно, что в заданиях 105 это 105, а 109 - это 109. Вряд-ли именно это задание представляет исключение.
0
0 / 0 / 0
Регистрация: 12.05.2022
Сообщений: 67
18.08.2022, 12:42  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Вы что-то выдумываете.
Раз вы не хотите мне верить,вот скрин
Миниатюры
Найти самый большой непрерывный фрагмент в массиве, сумма элементов которого делится на 3  
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
18.08.2022, 15:24
Цитата Сообщение от Rezu Посмотреть сообщение
Раз вы не хотите мне верить,вот скрин
На меньшее мы и не рассчитывали, спасибо.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13239 / 6871 / 1827
Регистрация: 18.10.2014
Сообщений: 17,416
18.08.2022, 17:57
Цитата Сообщение от Rezu Посмотреть сообщение
Раз вы не хотите мне верить,вот скрин
Во-первых, то есть вы действительно нас обманывали: вы нам тут дылдонили, что код "проходит только 7 тестов из 15", а в реальности запускалось только 8 тестов. То есть на текущий момент известно, что падает только один (!) тест и вы ничего не знаете о том, проходят ли остальные тесты после упавшего. (Не кажется ли вам, что вы где-то уже слышали о том, что приведенный код действительно не проходит на одном из тестов?)

Во-вторых, что вы собираетесь нам продемонстрировать этим скриншотом, если не виден код, который вы запускали? В частности, покажите-ка нам, как вы сделали исправление для защиты от переполнения int, о котором мы вас тут уже несколько раз предупреждали.

P.S. Как, наверное, все уже догадались, упал этот тест по той самой причине, которую описал и ТС той темы по ссылке, и здесь уже раза три как минимум упоминалась открытым текстом.
0
0 / 0 / 0
Регистрация: 05.11.2025
Сообщений: 2
13.12.2025, 22:24
Вот моё решения, по времени вроде проходит
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
 
int main(){
    ll n, i_f0 = 0, i_l0 = 0, i_f1 = 0, i_l1 = 0, i_f2 = 0, i_l2 = 0;
    cin >> n;
    vector <ll> v(n), prf(n+1);
    for (int i = 0; i < n; ++i){
        cin >> v[i];
    }
 
    for (int i = 1; i < prf.size(); ++i){
        prf[i] = prf[i-1] + v[i-1];
    }
    for (int i = 1; i < prf.size(); ++i){
        prf[i] = ((prf[i] % 3) + 3) % 3;
    }
 
    auto first_0 = find(prf.begin(), prf.end(), 0);
    auto last_0 = find(prf.rbegin(), prf.rend(),  0);
    if (first_0 != prf.end() && last_0 != prf.rend()){
        i_f0 = first_0 - prf.begin() + 1;
        i_l0 = (prf.rend() - last_0) - 1;
    }
 
    auto first_1 = find(prf.begin(), prf.end(), 1);
    auto last_1 = find(prf.rbegin(), prf.rend(),  1);
    if (first_1 != prf.end() && last_1 != prf.rend()){
        i_f1 = first_1 - prf.begin() + 1;
        i_l1 = (prf.rend() - last_1) - 1;
    }
 
    auto first_2 = find(prf.begin(), prf.end(), 2);
    auto last_2 = find(prf.rbegin(), prf.rend(),  2);
    if (first_2 != prf.end() && last_2 != prf.rend()){
        i_f2 = first_2 - prf.begin() + 1;
        i_l2 = (prf.rend() - last_2) - 1;
    }
 
 
    ll best_dist = 0, best_i = 0, best_j = 0;
    if (i_l0 - i_f0 >= i_l1 - i_f1){
        best_i = i_f0;
        best_j = i_l0;
        best_dist = i_l0 - i_f0;
    }else{
        best_i = i_f1;
        best_j = i_l1;
        best_dist = i_l1 - i_f1;
    }
 
    if (best_dist < i_l2 - i_f2){
        best_i = i_f2;
        best_j = i_l2;
    }
 
    if (best_i != 0 && best_j != 0){
        cout << best_i << " " << best_j << '\n';
    }else{
        cout << "-1";
    }
 
 
    return 0;
}
0
 Аватар для Наталья8
640 / 399 / 68
Регистрация: 09.03.2016
Сообщений: 4,415
14.12.2025, 00:26

Ты чё? Спортсмен?
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6767 / 3126 / 1065
Регистрация: 01.06.2021
Сообщений: 12,102
14.12.2025, 14:59
Наталья8, "скорость написания имеет решающее значение" - это ж сколько времени дают, что они успевают и на форуме вопросы задавать?
0
 Аватар для Наталья8
640 / 399 / 68
Регистрация: 09.03.2016
Сообщений: 4,415
15.12.2025, 21:52
Дядьки которые задание придумали, они тоже на скорость это работали?
Хренак - хренак и готово...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.12.2025, 21:52

Найти непрерывный фрагмент массива сумма чисел в котором максимальна
Сумма чисел в массиве В одномерном массиве, заполненном произвольными целыми числами, за один проход найдите непрерывный кусок, сумма...

Найти непрерывный фрагмент массива сумма чисел в котором максимальна
В одномерном массиве, заполненном произвольными целыми числами, за один проход найдите непрерывный кусок, сумма чисел в котором...

В заданном линейном массиве найти самый длинный фрагмент, состоящий из одинаковых элементов
МАССИВ в заданном линейном массиве размерностью N найти самый длинный фрагмент, состоящий из одинаковых элементов.

В массиве X найти самый большой элемент и вывести его и его номер на экран, в массиве Y - самый маленький
С помощью датчика случайных чисел сформировать два массива X и Y размерностью 100 и 200 чисел в диапазоне от 0 до 1 и от 0 до 100...

Найти треугольник, у которого самый большой радиус описанной окружности
помогите решить в паскале n треугольников заданы длинами своих сторон. Найти треугольник, у которого самый большой радиус описанной...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
36
Ответ Создать тему
Опции темы

Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru