感覺最後一題寫一下挺爽的!
給定乙個長度為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個...