眾所周知,小蔥同學擅長計算,尤其擅長計算乙個數是否是另外乙個數的倍數。
但小蔥只擅長兩個數的情況,當有很多個數之後就會比較苦惱。
現在小蔥給了你 n 個數,希望你從這 n 個數中找到三個數,使得這三個數的和是 k 的倍數,且這個和最大。
資料保證一定有解。
輸入格式
第一行包括 2 個正整數 n, k。
第二行 n 個正整數,代表給定的 n 個數。
輸出格式
輸出一行乙個整數代表所求的和。
資料範圍
1≤n≤105,
1≤k≤103,
給定的 n 個數均不超過 108
431
234
9
解題思路:本題顯然通過暴力搜尋會超時,用dfs應該也只能得到部分分。本題可採用對餘數進行搜尋,因為(a+b+c) % k = 0
那麼我們可以得到(a%k+b%k+c%k)%k = 0
所以我們可以通過搜尋餘數得出第三個餘數為多少:加入列舉了兩個餘數i,j那麼第三個餘數為(k-(i+j)%k)%k
,用vector陣列儲存響應餘數所對應的值。具體看**:
#include
#include
#include
#include
using
namespace std;
vector<
int> a[
1010];
intmain
(void
)for
(int i =
0; i < k; i++
)int ans =0;
for(
int i =
0; i < k; i++
)else
if(i == j && i != t)
else
if(i == t && j != t)
else
if(j == t && i != t)
else
} ans =
max(ans, sum);}
}printf
("%d"
, ans)
;return0;
}
藍橋杯倍數問題
題目描述 現在小蔥給了你 n 個數,希望你從這 n 個數中找到三個數,使得這三個數的和是 k 的倍數,且這個和最大。資料保證一定有解。1 n 10 5,1 k 10 3,給定的 n 個數均不超過 10 8。輸入格式 第一行包括 2 個正整數 n,k。第二行 n 個正整數,代表給定的 n 個數。輸出格...
藍橋杯 倍數問題
題目描述 眾所周知,小蔥同學擅長計算,尤其擅長計算乙個數是否是另外乙個數的倍數。但小蔥只擅長兩個數的情況,當有很多個數之後就會比較苦惱。現在小蔥給了你 n 個數,希望你從這 n 個數中找到三個數,使得這三個數的和是 k 的倍數,且這個和最大。資料保證一定有解。輸入格式 從標準輸入讀入資料。第一行包括...
藍橋杯2018初賽 倍數問題
題目描述 眾所周知,小蔥同學擅長計算,尤其擅長計算乙個數是否是另外乙個數的倍數。但小蔥只擅長兩個數的情況,當有很多個數之後就會比較苦惱。現在小蔥給了你 n 個數,希望你從這 n 個數中找到三個數 使得這三個數的和是 k 的倍數,且這個和最大。資料保證一定有解。輸入第一行包括 2 個正整數 n,k。第...