CodeForces 999D 貪心演算法

2021-09-03 08:08:46 字數 726 閱讀 3880

我們以n=8,m=4作為例子

因此我們需要在輸入的陣列中,湊出模m後餘數為0,1,2,3的元素各兩個才能滿足要求

當然用雙重迴圈可以做到這一點,但是題目限時3s,明顯超時

我們可以使用貪心的思想,當我們對乙個餘數取模後,我們去尋找乙個大於等於它且離它最近的乙個未滿足個數要求的餘數。每次對元素取模後,分析離哪個尚未滿足個數的餘數最近,並通過不斷+1的方式逼近直到等於那個餘數。

關鍵要理解為什麼這樣的貪心演算法能夠達到最優解:原因有二,其一是所有的cr總數剛好等於輸入的個數,陣列裡不存在其他未求餘的數,二是在一的前提下,只要是取距離最近的那個餘數,不管先取還是後取,結果都是最優的。

set使用+long long+scanf輸入

#include #include using namespace std;

const int maxn = 2e5+5;

typedef long long ll;

ll n, m, a[maxn], c[maxn], ans;

sets;

int main()

printf("%lld\n", ans);

for (int i = 0; i < n; i++) printf("%lld ", a[i]);

}

codeforces1141D題解 暴力 貪心

給出兩個長度為 n 1 n 150000 的僅含有小寫字母和 的字串,詢問兩個字串最多能有幾對匹配的字元。每個字母都可以與和它相同的字元匹配,可以與任意字元匹配,匹配與位置無關 輸出最大匹配對數,以及每一對中兩個字元在字串中的位置 cf1141d created by hao on 2019 4 1...

Codeforces 703D 樹狀陣列

codeforces 703d 題意 給1e6長度的區間,每個單位代表乙個數。給1e6個詢問,每次問區間內出現次數為偶數次的數異或和。思路 賽中的時候想莫隊水過去,結果pretest都沒過233 正解是樹狀陣列。首先假設是奇數次的話,就是乙個簡單字首和。現在偶數次,有乙個處理技巧就是記錄這個區間出現...

codeforces 912D 期望計算

題目鏈結 題意 在乙個n m的魚塘裡面放置k條魚,每次可以選定乙個r r的矩陣並獲得矩陣內魚的數量的分數。請問該如何在魚塘裡面放置魚,使得最後的期望得分最大。思路 直接通過列舉放置魚的位置計算期望得分明顯非常非常不現實,於是我們換一種計算思路我們去計算各點放置魚之後可以得到的期望得分,然後取前k大的...