洛谷3941 入陣曲

2021-08-10 14:31:45 字數 2215 閱讀 3178

標籤:模擬,字首和

題目描述

小 f 很喜歡數學,但是到了高中以後數學總是考不好。

有一天,他在數學課上發起了呆;他想起了過去的一年。一年前,當他初識演算法競賽的 時候,覺得整個世界都煥然一新。這世界上怎麼會有這麼多奇妙的東西?曾經自己覺得難以解決的問題,被乙個又乙個演算法輕鬆解決。

小 f 當時暗自覺得,與自己的幼稚相比起來,還有好多要學習的呢。

一年過去了,想想都還有點恍惚。

他至今還能記得,某天晚上聽著入陣曲,激動地睡不著覺,寫題寫到雞鳴時分都興奮不 已。也許,這就是熱血吧。

也就是在那個時候,小 f 學會了矩陣乘法。讓兩個矩陣乘幾次就能算出斐波那契數列的第 10^100項,真是奇妙無比呢。

不過,小 f 現在可不想手算矩陣乘法——他覺得好麻煩。取而代之的,是乙個簡單的小問題。他寫寫畫畫,畫出了乙個 n \times mn×m 的矩陣,每個格仔裡都有乙個不超過 kk 的正整數。

小 f 想問問你,這個矩陣裡有多少個不同的子矩形中的數字之和是 kk 的倍數? 如果把乙個子矩形用它的左上角和右下角描述為(x1,y1,x2,y2)(x1 ,y1,x2 ,y2 ),其中x1<=x2,y1<=y2 ;那麼,我們認為兩個子矩形是不同的,當且僅當他們以(x1,y1,x2,y2)表示時不同;也就是 說,只要兩個矩形以 (x1,y1,x2,y2)表示時相同,就認為這兩個矩形是同乙個矩形,你應該 在你的答案裡只算一次。

輸入輸出格式

輸入格式:

從標準輸入中讀入資料。

輸入第一行,包含三個正整數 n,m,k。

輸入接下來 n 行,每行包含 m個正整數,第 i行第 j 列表示矩陣中第 i 行第 j列 中所填的正整數 a[ i ][ j ]

輸出格式:

輸出到標準輸出中。

輸入一行乙個非負整數,表示你的答案。

輸入輸出樣例

輸入樣例#1:

2 3 2

1 2 1

2 1 2

輸出樣例#1:

6 說明

【樣例 1 說明】

這些矩形是符合要求的: (1, 1, 1, 3),(1, 1,2, 2),(1, 2, 1, 2),(1, 2, 2, 3),(2, 1, 2, 1),(2, 3, 2, 3)。

子任務會給出部分測試資料的特點。如果你在解決題目中遇到了困難,可以嘗試只解 決一部分測試資料。每個測試點的資料規模及特點如下表:

分析:實質上k倍區間的方法

o(n^4)用雙重字首和優化

o(n^3)可以列舉x1,x2兩行並列舉y列   把這些壓成乙個數,之後進行列舉統計

對於任意一段區間[l,r]的和就是s[r]-s[l-1].

(sum[r]-sum[l-1])%k 保證了[l,r]這段區間要麼%k等於0 要麼比k小.

等於0說明這段區間正好是k的倍數然後通過字首和相同的資料來判斷出剩下的k的倍數:(sum[r]-sum[l-1])%k== 0.

變形後就是:sum[r]%k==sum[l-1]%k

code

#include#include#include#include#include#include#define rep(i,a,b) for(register int i=a;i<=b;i++)

#define dep(i,a,b) for(register int i=a;i>=b;i--)

#define ll long long

#define mem(x,num) memset(x,num,sizeof x)

#ifdef win32

#define ll "%i64d\n"

#else

#define ll "%lld\n"

#endif

using namespace std;

inline ll read()

while(ch>='0'&&ch<='9')

return x*f;

}const int maxn=406,maxx=1e6+6;

ll n,m,k,x,s[maxn][maxn],b[maxx],cnt[maxx]=,ans=0;

int main()

rep(p,1,m)cnt[b[p]]=0;

} printf(ll,ans);

return 0;

}

洛谷P3941入陣曲

給你乙個的 n m 矩陣,每個格仔裡都有乙個不超過 k 的正整數。詢問這個矩陣裡有多少個不同的子矩形中的數字之和是 k 的倍數?我們先考慮乙個簡化版的一維問題 給定乙個長度為 n 的序列,a 1 a 2 cdots,a n 如果某一段子串行的和為 k 的倍數,則稱其為 k 倍區間,求該序列中有多少個...

入陣曲 桶,字首和

給出的題解不錯,所以不寫得太詳細了。誰不會60分的那真是沒辦法了。1 include2 int x 405 405 n,m,k,ans 3int main 考場上秒寫的8行60分暴力 看資料範圍,有不少測試點m 2。這有什麼用?肯定和同樣矩陣大小而mn均勻的點不一樣啦 永遠不要忽視測試點的提示作用。...

洛谷2119 魔法陣

標籤 數學,遞推,模擬 題目描述 六十年一次的魔法戰爭就要開始了,大魔法師準備從附近的魔法場中汲取魔法能量。大魔法師有m個魔法物品,編號分別為1,2,m。每個物品具有乙個魔法值,我們用xi表示編號為i的物品的魔法值。每個魔法值xi是不超過n的正整數,可能有多個物品的魔法值相同。大魔法師認為,當且僅當...