第八屆藍橋杯第十題

2021-07-31 08:51:00 字數 1098 閱讀 3276

感覺最後一題寫一下挺爽的!

給定乙個長度為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 21

2 3

4 5

程式應該輸出:

6資源約定:

峰值記憶體消耗(含虛擬機器) < 256m

cpu消耗 < 2000ms

請嚴格按要求輸出,不要畫蛇添足地列印類似:「請您輸入...」 的多餘內容。

注意:main函式需要返回0;

只使用ansi c/ansi c++ 標準;

不要呼叫依賴於編譯環境或作業系統的特殊函式。

所有依賴的函式必須明確地在原始檔中 #include 不能通過工程設定而省略常用標頭檔案。

思路:用字首和記錄前面的數構成的區間[0,i]是否能夠被k整除,然後[i,j]區間和能夠被k整除的話就是 (sum[j] - sum[i]) % k== 0;,就相當於sum[i] == sum[j],其中sum[i],sum[j]是前機字首和餘k後的結果;
#includeusing namespace std;

typedef long long ll;

const ll maxn = 1000000 + 10;

int a[maxn];

int sum[maxn];

int n,m;

mapms;

int main()

map::iterator it;

for(it = ms.begin(); it != ms.end(); it ++)

cout << ans << endl;

} return 0;

}

第八屆藍橋杯5 7題

description 求1個整數的第k位數字有很多種方法。以下的方法就是一種。input 沒有輸入。output 見上文描述。求x用10進製表示時的數字長度 思路 對遞迴的掌握和使用理解 include intlen int x 取x的第k位數字 intf int x,int k intmain ...

第八屆藍橋杯C C 程式設計B組省賽第十題

problem description k倍區間 給定乙個長度為n的數列,a1,a2,an,如果其中一段連續的子串行ai,ai 1,aj i j 之和是k的倍數,我們就稱這個區間 i,j 是k倍區間。你能求出數列中總共有多少個k倍區間嗎?input 第一行包含兩個整數n和k。1 n,k 100000...

第八屆藍橋杯第八題包子湊數

小明幾乎每天早晨都會在一家包子鋪吃早餐。他發現這家包子鋪有n種蒸籠,其中第i種蒸籠恰好能放ai個包子。每種蒸籠都有非常多籠,可以認為是無限籠。每當有顧客想買x個包子,賣包子的大叔就會迅速選出若干籠包子來,使得這若干籠中恰好一共有x個包子。比如一共有3種蒸籠,分別能放3 4和5個包子。當顧客想買11個...