NOIP模擬 matrix(簡化矩陣)

2022-06-01 08:15:07 字數 1525 閱讀 7234

source:noip2016-rzz-1

給出兩個 n×n 的矩陣 a、b,矩陣每行每列標號 0~n-1 。

定義這兩個矩陣的乘積 ab 為

現在要在這兩個矩陣上依次進行 q 次修改操作,兩種操作描述如下:

在每一次修改操作進行後,輸出矩陣 ab(這兩個矩陣的乘積矩陣)中每個位置元素的權值之和。

第一行,乙個正整數 n ,表示矩陣的大小。

接下來 n 行,每行 n 個整數,描述矩陣 a 。

接下來 n 行,每行 n 個整數,描述矩陣 b 。

接下來一行,乙個正整數 q ,表示操作次數。

接下來 q 行,每行描述乙個操作,格式如題面所示。

輸出 q 行,每行乙個整數,表示這次操作完成後的答案。

1 2 

3 4 

4 3 

2 1 

3 a 1 1 2 

b 0 1 3 

a 0 0 10

40 

40 103

【資料規模與約定】

對於 10% 的資料,n = 1。對於 30% 的資料,n,q≤10。對於 80% 的資料,1≤n≤100,|ai,j|,|bi,j|≤10。

對於 100% 的資料,1≤n≤1000,1≤q≤105,|aij|,|bi,j|≤1000。

矩陣乘法的答案矩陣中的$(i, j)$為:矩陣$1$的第$i$行中的每個數$(i, k)$,乘上矩陣$2$中第j列的每乙個數$(k, j)$

所以要求每次操作的答案,只需要記錄乙個$sum1[i]$表示矩陣$1$中第$i$列的和,和$sum2[i]$表示矩陣$2$中第$i$行的和,和$sum$表示答案矩陣的和。

修改矩陣$1$中的$(i, j)$時,$sum$只需加上$delta × sum2[i]$

修改矩陣$2$中的$(i, j)$時, $sum$只需加上$delta × sum1[j]$即可。

#include#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long

ll;const

int n = 1005

;ll all, sum1[n], sum2[n];

inta[n][n], b[n][n];

intn, q;

inline

intre()

inline

void

wr(ll x)

intmain()

else

if(opt == 'b'

) wr(all), putchar('\n

');}

return0;

}

view code

NOIP校內模擬 矩陣分組 matrix

很容易想到二分。我們二分什麼呢?二分極值 首先,a,b兩部分一定是逐行長度遞增 遞減 的圖形,才能滿足最多拐一次彎到達,而且a,b可以互換 其次,最大值和最小值肯定不能在乙個區域裡,這樣得出的答案肯定不是最優的,我們可以根據這個性質,找到check的方法 假設最大值在a這一部分,a覆蓋了左上角,我們...

Noip模擬題 Matrix 遞推,組合數

時間限制 1 sec 記憶體限制 512 mb 題目描述 小 z 的女朋友送給小 z 乙個 n n 的矩陣。但是矩陣實在太大了,小 z 的女朋友拿不動,只能帶給他兩個長度為 n 的整數序列 l,t 分別作為矩陣 f 的第一行和第一列 保證 l1 t1 並且告訴小 z 矩陣可以通過如下方式得到 fi,...

NOIP2014 比例簡化 模擬

輸入檔案 ratio.in輸出檔案 ratio.out簡單對比 時間限制 1 s 記憶體限制 256 mb 在社交 上,經常會看到針對某乙個觀點同意與否的民意調查以及結果。例如,對某一觀點表示支援的有1498人,反對的有902人,那麼贊同與反對的比例可以簡單的記為1498 902。不過,如果把調查結...