2017藍橋杯省賽第十題:k倍區間
2017藍橋杯省賽第十題:k倍區間
給定一個長度為N的數列,A1, A2, … AN,如果其中一段連續的子序列Ai, Ai+1, … Aj(i <= j)之和是K的倍數,我們就稱這個區間[i, j]是K倍區間。
你能求出數列中總共有多少個K倍區間嗎?
輸入
第一行包含兩個整數N和K。(1 <= N, K <= 100000)
以下N行每行包含一個整數Ai。(1 <= Ai <= 100000)
輸出
輸出一個整數,代表K倍區間的數目。
例如,
輸入:
5 2
1
2
3
4
5
輸出:
6
思路:字首和加列舉列舉右區間的貢獻即可。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+5;
int sum[N],cnt[N],n,k;
ll ans;
int main(){
scanf("%d%d",&n,&k),cnt[0]=1;
for(int i=1;i<=n;i++){
scanf("%d",&sum[i]),sum[i]=(sum[i-1]+sum[i])%k;
ans+=cnt[sum[i]];
cnt[sum[i]]++;
}
printf("%lld\n",ans);
return 0;
}
做完一個題就要思考一下:遇到這種型別的題,我們該往那哪個方向去考慮呢?
像這樣有關區間和的問題,我們第一時間就要想到字首和思想,因為字首和可以求出任意區間和,而對於統計區間個數的問題,我們通常採用列舉每個區間端點的貢獻(有可能是左端點,有可能是右端點),然後對所有區間貢獻求和即可。
而這一題,恰好利用兩個不同字首和 m o d k mod\ k mod k後相等,則相減 m o d k mod\ k mod k就等於0 的思想來統計個數,此外我們需要注意的是此題的正確性是因為 a i > 0 a_i>0 ai>0,如果有 a i = 0 a_i=0 ai=0的情況則需要討論,因為 0 ( m o d k ) = 0 0\pmod{k}=0 0(modk)=0。
相關文章
- 藍橋杯-k倍區間
- 2017省賽藍橋杯B組
- C++實現 藍橋杯 k倍區間C++
- 第十三屆藍橋杯省賽A組
- 藍橋杯省賽真題2013題解
- 第九屆藍橋杯省賽C++A組 倍數問題(dfs)C++
- 2018藍橋杯省賽B組
- 第十三屆藍橋杯省賽C/C++ B組C++
- 第十五屆藍橋杯軟體賽省賽C/C++B 組題解C++
- 【藍橋杯考前突擊】第十屆藍橋杯省賽C/C++大學B組 試題 D 數的分解C++
- 藍橋杯第五屆省賽題目及題解
- 第十五屆藍橋杯C++B組省賽總結C++
- 第十屆藍橋杯省賽C++B組 等差數列C++
- 2016藍橋杯省賽第七題剪郵票
- 第十一屆藍橋杯省賽CC++組第二場比賽C++
- 第十四屆藍橋杯大賽軟體賽省賽Python 《三國遊戲》Python遊戲
- 第十四屆藍橋杯省賽C++ B組(個人經歷 + 題解)C++
- 2017第八屆藍橋杯C/C++ B組省賽第二題 秒解C++
- 【藍橋杯】計蒜客2017模擬賽A習題整理
- 第十五屆藍橋杯大賽軟體賽省賽 C/C++ 大學 A 組C++
- 【題解】爬山 藍橋杯2024省B
- 【計蒜客】2017藍橋杯模擬賽(四)
- 試題B:小球反彈(第十五屆藍橋杯省賽B組c/c++組)C++
- 藍橋杯-連號區間數
- 藍橋杯歷年(省賽)試題彙總及試題詳解
- 2015年藍橋杯六屆省賽大學B組真題
- 2020藍橋杯省賽B組C++(第二場)真題C++
- 第六屆藍橋杯省賽CC++B組C++
- 2019年省賽第十屆藍橋杯B組C/C++試題H解 等差數列C++
- 方格分割 二進位制列舉+DFS(2017 第八屆藍橋杯省賽A組 第4題)
- 2016年藍橋杯C/C++組省賽第三題--湊算式C++
- 2016年藍橋杯C/C++組省賽第四題--快速排序C++排序
- 2015藍橋杯省賽javaA組-----牌型種數(填空)Java
- 第九屆藍橋杯B組省賽———乘積最大
- 歷屆藍橋杯省賽(C、C++)的答案(轉)C++
- 第十五屆藍橋杯 網路安全賽道 ezjavaJava
- 第十屆藍橋杯C++國賽B組部分題解(假題解)C++
- 2016年藍橋杯C/C++組省賽第一題--煤球數目C++