題大意:給你n個數和乙個k,問有多少個區間可以得到sum%k==0,比如(l,r),(a[l]+a[l+1]+........+a[r])%k==0
解法:利用字首和儲存得到字首和陣列,並用乙個陣列記錄下此時字首和出現的次數,因為當重複出現同乙個字首和的時候代表有一段區間能夠%k==0。
**:
#include #include #include #include #include #include #include #include #include #include #include #define ll long long
#define max(a,b) (a>b?a:b)
using namespace std;
const int maxn=1e6+7;
ll a[maxn];
ll sum[maxn]=;
ll vis[maxn];
int main()
cin>>k;
int ans=0;
for(int i=1;i<=n;i++)
for(int i=1;i<=n;i++)
cout
}
字首和問題
這個優化主要是用來在o 1 時間內求出乙個序列a中,a i a i 1 a j 的和。具體原理十分簡單 用sum i 表示 a 1 a 2 a i 其中sum 0 0,則 a i a i 1 a j 即等於sum j sum i 1 同理,有一維就有二維。對於乙個矩陣a,我們也能在o 1 時間內求出...
字首和演算法 一維字首和 二維字首和
輸入乙個長度為n的整數序列。接下來再輸入m個詢問,每個詢問輸入一對l,r。對於每個詢問,輸出原序列中從第l個數到第r個數的和。輸入格式 第一行包含兩個整數n和m。第二行包含n個整數,表示整數數列。接下來m行,每行包含兩個整數l和r,表示乙個詢問的區間範圍。輸出格式 共m行,每行輸出乙個詢問的結果。資...
字首和 (1)什麼是字首和和一維字首和
字首和 prefix sum 的定義為 對於乙個給定的數列 a,它的字首和數列 s 是通過遞推能求出來得 例如 假設陣列a和字首和陣列s都已經定義 int i 初始條件 a 0 0 s 0 0 for i 1 i n i 下面我們用乙個模板題,將完整的一維陣列字首和做乙個簡單的展示。題目鏈結 inc...