Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 02.11.2021
Сообщений: 105

Задача на префиксные суммы матрицы

18.02.2023, 22:08. Показов 2858. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача:
В первой строке находится числа N, M размеры матрицы (1 ≤ N, M ≤ 1000) и K — количество запросов (1 ≤ K ≤ 100000). Каждая из следующих N строк содержит по M чисел`— элементы соответствующей строки матрицы (по модулю не превосходят 1000). Последующие K строк содержат по 4 целых числа, разделенных пробелом x1 y1 x2 y2 — запрос на сумму элементов матрице в прямоугольнике (1 ≤ x1 ≤ x2 ≤ N, 1 ≤ y1 ≤ y2 ≤ M)

Формат вывода
Для каждого запроса на отдельной строке выведите его результат — сумму всех чисел в элементов матрице в прямоугольнике (x1, y1), (x2, y2)

На следующем тесте падает, снизу указана ошибка. Подскажите , что нужно исправить
10 20 15
-730 -468 -700 -997 518 561 263 399 852 564 -447 627 -838 735 -441 -181 536 75 465 449
303 791 -687 653 -471 637 829 493 -555 -576 -414 -285 -486 -557 -725 -969 -996 538 -12 413
-342 541 39 -180 276 156 197 -189 -770 -339 817 90 -549 -871 -257 -20 323 -872 -971 768
-891 -384 -960 -377 -384 -685 -345 -380 411 643 -968 -932 -260 -371 -111 -985 785 -915 -617 572
-254 757 -338 197 887 -38 734 209 90 764 -466 199 937 -426 823 -448 -111 -966 173 857
677 -238 926 -584 391 -186 990 -268 -544 930 862 202 687 -477 956 130 42 246 -662 -869
9 -571 -113 -498 3 -291 55 450 -257 785 306 977 -897 231 951 495 602 497 -774 -943
-17 645 -184 -331 -833 -672 356 209 575 695 -103 -860 681 785 -357 -316 -950 255 691 -649
-404 -4 885 -301 785 392 -807 -57 -112 978 -442 429 622 -69 655 347 260 11 -888 -609
-738 -433 -469 943 -649 -269 -374 959 986 -684 -691 -862 -130 752 -162 -346 143 -412 154 589
1 1 2 4
Traceback (most recent call last):
File "/home/main.py", line 24, in <module>
a[j][i]=a[j][i-1]+a[j-1][i]-a[j-1][i-1]+p[j]
IndexError: list index out of range




Python
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
k= list(map(int, input().split()))
a=[[0 for j in range(int(k[1]))] for i in range(int(k[0]))]
for i in range(0, k[1], 1):
    p=list(map(int, input().split()))
    for j in range(0, k[0], 1):
        if k[0]==k[1]:
            if i==0 and j==0:
                a[i][j]=p[j]
            elif i==0:
                a[i][j]=p[j]+a[i][j-1]    
            else:
                if j==0:
                    a[i][j]=a[i-1][j]+p[j]
                else:
                    a[i][j]=p[j]+a[i-1][j]+a[i][j-1]-a[i-1][j-1]
        if k[0]!=k[1]:
            if j==0 and i==0:
                a[0][0]=p[j]
            if j!=0 and i==0:
                a[j][i]=p[j]+a[j-1][i]
            if i!=0 and j==0:
                a[j][i]=a[j][i-1]+p[j]
            if i!=0 and j!=0:
                a[j][i]=a[j][i-1]+a[j-1][i]-a[j-1][i-1]+p[j]
print(a)
for f in range (0, k[2], 1):
    r= list(map(int, input().split()))
    SUM=0
    if r[0]==1 and r[1]==1:
        SUM=a[r[2]-1][r[3]-1]
    elif r[0]==1 and r[1]!=1:
        SUM=a[r[2]-1][r[3]-1]-a [r[2]-1][r[1]-2]
    elif r[0]!=1 and r[1]==1:
        SUM=a[r[2]-1][r[3]-1]-a[r[1]-1][r[2]-2] 
        
    elif r[0]!=1 and r[1]!=1:
        SUM=a[r[2]-1][r[3]-1]-a[r[1]-2][r[3]-1]-a[r[2]-1][r[1]-2]+a[r[0]-2][r[1]-2]
    print(SUM)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.02.2023, 22:08
Ответы с готовыми решениями:

Префиксные суммы с запросами
Решал тут задачу: Дано - Дан массив из N элементов, нужно научиться находить сумму чисел на отрезке. Ввод - Первая строка содержит...

Префиксные суммы для трехмерного случая
Кто может подсказать как посчитать префиксные суммы для трехмерного случая?

Задача D-008. Сравнить суммы элементов первой и последней строк матрицы
Задача D-008. Сравнить суммы элементов первой и последней строк матрицы

7
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38193 / 21126 / 4309
Регистрация: 12.02.2012
Сообщений: 34,732
Записей в блоге: 14
19.02.2023, 09:54
Не хочется смотреть, что у тебя наверчено... Вообще-то расчет суммы прямоугольника внутри матрицы - это вот:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
def psum(matr,x1,y1,x2,y2):
    s=0
    for i in range(y1-1,y2):
        for j in range(x1-1,x2):
            s+=matr[i][j]
    return s
    
m=[[1,2,3,4,5,6],
   [4,5,6,7,8,9],
   [7,8,9,1,2,3],
   [0,9,8,7,6,5]]
   
print(psum(m,2,2,3,4))
При условии, что x - горизонтальная размерность (по столбцам), а y - вертикальная (по строкам). И еще: в запросе нумерация строк и столбцов с 1, а встроках Питона - с нуля.
0
0 / 0 / 0
Регистрация: 02.11.2021
Сообщений: 105
19.02.2023, 09:58  [ТС]
идея-ОГОНЬ, которая будет не проходить по времени при больших значениях строк и столбцов...
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38193 / 21126 / 4309
Регистрация: 12.02.2012
Сообщений: 34,732
Записей в блоге: 14
19.02.2023, 10:03
Цитата Сообщение от SAVCHink Посмотреть сообщение
при больших значениях строк и столбцов...
- да, в этом случае нужен предварительный расчет. Но что-то подсказывает, что код не должен получиться таким разлапистым.
0
2431 / 1474 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
19.02.2023, 10:10
Задача №2772. Сумма в прямоугольнике
0
0 / 0 / 0
Регистрация: 02.11.2021
Сообщений: 105
19.02.2023, 10:16  [ТС]
В последнем сообщении, где указана программа, когда ввожу не квадратную матрицу эта ошибка вылезает
File "/home/main.py", line 12, in <module>
b[i + 1][j + 1] = a[i][j] + b[i][j + 1] + b[i + 1][j] - b[i][j]
TypeError: 'int' object is not subscriptable
0
2431 / 1474 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
19.02.2023, 10:23
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
n, m, k = map(int, input().split())
a = []
for i in range(n):
    a.append(list(map(int, input().split())))
b = [0] * (n + 1)
 
for i in range(n + 1):
    b[i] = [0] * (m + 1)
 
for i in range(n):
    for j in range(m):
        b[i + 1][j + 1] = a[i][j] + b[i][j + 1] + b[i + 1][j] - b[i][j]
 
x = []
for i in range(k):
    i1, j1, i2, j2 = map(int, input().split())
    c = b[i2][j2] - b[i1 - 1][j2] - b[i2][j1 - 1] + b[i1 - 1][j1 - 1]
    x.append(c)
print(*x, sep='\n')
Вроде так.
2
0 / 0 / 0
Регистрация: 02.11.2021
Сообщений: 105
19.02.2023, 10:24  [ТС]
Cпасибо большое, все работает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.02.2023, 10:24
Помогаю со студенческими работами здесь

Задача на матрицы. Найти суммы элементов всех четных и нечётных строк и столбцов
Т.е. иными словами нужно найти суммы элементов в каждой чётной и нечётной строке. И также в каждом чётном и нечётном столбце. Помогите,...

Префиксные максимумы
Здравствуйте. Для курсовой работы задали разобрать тему &quot;Префиксные максимумы&quot;, но информации в интернете очень мало (либо я не...

Постфиксные и префиксные *менты
Только вчера узнал о существовании префиксного варианта декремента и инкремента: ++example; --example; И что-то это меня еще...

Префиксные/Постфиксные выражения
Вводится одно из таких выражений. Как мне проверить каким именно это выражение является и как нормально считать знаки и числа для...

Постфиксные и префиксные операции
являются ли аналоги преобразований в комментарах - абсолютно точными? #include &lt;iostream&gt; using namespace std; int main()...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru