Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 12.05.2022
Сообщений: 67

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

16.08.2022, 13:55. Показов 8529. Ответов 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
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,407
17.08.2022, 18:55
Цитата Сообщение от Rezu Посмотреть сообщение
Хах,почему то проходит только 7 тестов из 15
Во-первых, в теме по ссылке ТС ясно сообщил, что пришлось заменить тип int на long long, ибо у ТС в одном (!) тесте возникало арифметическое переполнение. Но у него был диапазон входных данных до 109 по модулю, а у вас - всего до 109. Поэтому в вашем случае переполнение (да еще в стольких тестах!) маловероятно.

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

Добавлено через 48 секунд
TheCalligrapher, вот я цитировал ваш текст, сам ничего не набирал, а теперь вижу, что число превратилось в 109
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,407
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,358
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,358
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
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,407
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
639 / 397 / 68
Регистрация: 09.03.2016
Сообщений: 4,380
14.12.2025, 00:26

Ты чё? Спортсмен?
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6699 / 3100 / 1064
Регистрация: 01.06.2021
Сообщений: 11,982
14.12.2025, 14:59
Наталья8, "скорость написания имеет решающее значение" - это ж сколько времени дают, что они успевают и на форуме вопросы задавать?
0
 Аватар для Наталья8
639 / 397 / 68
Регистрация: 09.03.2016
Сообщений: 4,380
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
Ответ Создать тему
Новые блоги и статьи
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
После закрытия оутлука продолжает висеть процесс в диспетчере задач
Maks 27.10.2026
С недавнего времени в продакшене возникла проблема: при закрытии оутлука в диспетчере задач продолжал висеть процесс outlook. exe. Проблема возникла после установки MS Office 2021 LTSC на машинах, под. . .
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него. https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952 Инструкция внутри. https:/ / youtu. be/ VpfFZSUDGnQ. . .
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru