第九屆藍橋杯省賽C A組 倍數問題(DFS)

2021-10-02 12:04:46 字數 1262 閱讀 1303

【題目描述】

眾所周知,小蔥同學擅長計算,尤其擅長計算乙個數是否是另外乙個數的倍數。但小蔥只擅長兩個數的情況,當有很多個數之後就會比較苦惱。現在小蔥給了你 n 個數,希望你從這 n 個數中找到三個數,使得這三個數的和是 k 的倍數,且這個和最大。資料保證一定有解。

【輸入格式】

從標準輸入讀入資料。

第一行包括 2 個正整數 n, k。

第二行 n 個正整數,代表給定的 n 個數。

【輸出格式】

輸出到標準輸出。

輸出一行乙個整數代表所求的和。

【樣例入】

4 31 2 3 4

【樣例輸出】

9【樣例解釋】

選擇2、3、4。

【資料約定】

對於 30% 的資料,n <= 100。

對於 60% 的資料,n <= 1000。

對於另外 20% 的資料,k <= 10。

對於 100% 的資料,1 <= n <= 10^5, 1 <= k <= 10^3,給定的 n 個數均不超過 10^8。

資源約定:

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

cpu消耗 < 1000ms

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

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

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

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

所有依賴的函式必須明確地在原始檔中 #include

不能通過工程設定而省略常用標頭檔案。

思路:就是使用dfs的方法求解了,深度遍歷三個數字,得到符合要求的就進行判斷是否比之前的好。感覺和三個for迴圈並沒有什麼區別。。。

#include#include#includeusing namespace std;

int n, k, ans = 0;

int temp[3], num[100005], vis[100005] = ;

void dfs(int s)

return;

} else

} }}

int main()

dfs(0);

cout << ans << endl;

long end = clock();

cout << (end - start)/clocks_per_sec << endl;

system("pause");

return 0;

}

第九屆藍橋杯省賽C A組 付賬問題

題目描述 幾個人一起出去吃飯是常有的事。但在結帳的時候,常常會出現一些爭執。現在有 n 個人出去吃飯,他們總共消費了 s 元。其中第 i 個人帶了 ai 元。幸運的是,所有人帶的錢的總數是足夠付賬的,但現在問題來了 每個人分別要出多少錢呢?為了公平起見,我們希望在總付錢量恰好為 s 的前提下,最後每...

第九屆藍橋杯省賽C A組 航班時間

問題背景 小h前往美國參加了藍橋杯國際賽。小h的女朋友發現小h上午十點出發,上午十二點到達美國,於是感嘆到 現在飛機飛得真快,兩小時就能到美國了 小h對超音速飛行感到十分恐懼。仔細觀察後發現飛機的起降時間都是當地時間。由於北京和美國東部有12小時時差,故飛機總共需要14小時的飛行時間。不久後小h的女...

第九屆藍橋杯省賽C A組 航班時間

問題背景 小h前往美國參加了藍橋杯國際賽。小h的女朋友發現小h上午十點出發,上午十二點到達美國,於是感嘆到 現在飛機飛得真快,兩小時就能到美國了 小h對超音速飛行感到十分恐懼。仔細觀察後發現飛機的起降時間都是當地時間。由於北京和美國東部有12小時時差,故飛機總共需要14小時的飛行時間。不久後小h的女...