試題 歷屆試題 k倍區間
資源限制
時間限制:2.0s 記憶體限制:256.0mb
問題描述
給定乙個長度為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 2123
45樣例輸出
6資料規模和約定
峰值記憶體消耗(含虛擬機器) < 256m
cpu消耗 < 2000ms
請嚴格按要求輸出,不要畫蛇添足地列印類似:「請您輸入…」 的多餘內容。
注意:main函式需要返回0;
只使用ansi c/ansi c++ 標準;
不要呼叫依賴於編譯環境或作業系統的特殊函式。
所有依賴的函式必須明確地在原始檔中 #include
不能通過工程設定而省略常用標頭檔案。
提交程式時,注意選擇所期望的語言型別和編譯器型別。
/字首和,但列舉會超時,所以要優化
//(k[j]-k[i-1])%b==0
//直接把看k[i]%p
//若k[j]==k[i-1] 則這兩個點符合題意
#pragma warning(disable:4996)
#include
"iostream"
#include
"functional"
#include
"algorithm"
#include
"cstring"
#include
"stack"
#include
"cmath"
#include
"queue"
#include
"vector"
#include
"map"
typedef
long
long
int ll;
using
namespace std;
ll k[
100009
],an[
100009
],j[
100009];
intmain()
ll a,b;
scanf
("%lld%lld"
,&a,
&b);
k[0]
=0; ll ans=0;
an[0]
++;for(
int i=
1;i<=a;i++
)for
(int i=
0;i) cout<}
//還用一種優化** 不用初始化前n項和
#pragma warning(disable:4996)
#include
"iostream"
#include
"functional"
#include
"algorithm"
#include
"cstring"
#include
"stack"
#include
"cmath"
#include
"queue"
#include
"vector"
#include
"map"
typedef
long
long
int ll;
using
namespace std;
ll k[
100009
],l[
100009];
intmain()
cout<}
藍橋杯 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 10...
藍橋杯 K倍區間
時間限制 2.0s 記憶體限制 256.0mb 給定乙個長度為n的數列,a1,a2,an,如果其中一段連續的子串行ai,ai 1,aj i j 之和是k的倍數,我們就稱這個區間 i,j 是k倍區間。你能求出數列中總共有多少個k倍區間嗎?輸入格式 第一行包含兩個整數n和k。1 n,k 100000 以...
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 輸...