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

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

18.02.2023, 22:08. Показов 2726. Ответов 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
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 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
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru