k倍區間
有n個數的數列
a1,a2,...,an
,定義s(i, j) = ai+ai+1+
……+aj(i<=j)
。如果s(i, j)
能被正整數
k整除,那麼稱
s(i, j)為k
倍區間。
測試資料共兩行。第一行為兩個正整數n和
k,第二行為
n個不同的正整數。
輸入樣例1:
5 21 2 3 4 5
輸入樣例2:
5 31 2 3 4 5
輸出樣例1:
輸出樣例2:
樣例1解釋:這
6個區間分別為
[2,2], [4,4], [1,3], [3, 5], [1, 4], [2, 5]
題解:以sum(i)表示
a1+a2+
……+ai
,那麼s(i, j) = sum(j) - sum(i-1)。k
倍區間滿足
s(i, j) % k == 0
,則[sum(j) - sum(i-1)] % k == 0
,變換為
sum(j) % k == sum(i-1) % k
。可以邊讀入
ai邊計算
sum(i)
,同時做模
k運算。然後,對於
sum(r)
,假設有x個
sum(l)(l的值與
sum(r)
相同,那麼就有x個
k倍區間,累加到答案中。
#include#include#define maxn 100001
int cnt[maxn], a[maxn];
__int64 sum;
int main()
memset(cnt, 0, sizeof(cnt));
a[0] = 0;
for(i = 1; i <= n; i++)
sum = 0;
cnt[0] = 1;
for(i = 1; i <= n; i++)
printf("%i64d\n", sum);
return 0;
}
2023年藍橋杯B組C C 決賽題目
從昏迷中醒來,小明發現自己被關在x星球的廢礦車裡。礦車停在平直的廢棄的軌道上。他的面前是兩個按鈕,分別寫著 f 和 b 小明突然記起來,這兩個按鈕可以控制礦車在軌道上前進和後退。按f,會前進97公尺。按b會後退127公尺。透過昏暗的燈光,小明看到自己前方1公尺遠正好有個監控探頭。他必須設法使得礦車正...
2023年藍橋杯B組C C 決賽題解
三重迴圈 列舉a,b,c的值,如果滿足兩個條件 3個a 7個b 1個c 15 4個a 10個b 1個c 420 就是一組合法的解。輸出a b c就是答案 一開始以為很難,看了題解 都是用dfs暴力搜出來的 國賽第二題永遠是用dfs解決。下面部落格dfs的很完美啊!參考部落格 思路 dfs x,y 正...
2023年藍橋杯C C 組B組第二題
include includeint a 30 int fun1 int num for int j last printf n if getasynckeystate 48 sum if j 29 if go 0 if k 27 a k 0 else if go 1 else if go 2 把剩...