挑戰程式設計之刷題筆記2(貪心法)

2021-07-27 14:58:02 字數 854 閱讀 6917

const int v[6]=;

//省略輸入c[i];

int ans;

for(int i=5;i>=0;i--)

cout//輸入

int n, s[max_n], t[max_n];

cin >> n;

for (int i = 0; i < n; ++i)

for (int i = 0; i < n; ++i)

//用於對工作排序的pair陣列

pairitv[max_n];

for (int i = 0; i

給定長度為n的字串s,要構造乙個長度為n的字串t。最初,t是乙個空串,隨後反覆進行下列任意操作:

從s的頭部刪除乙個字元,加到t的尾部;從s的尾部刪除乙個字元,加到t的尾部。

目標是要構造字典序盡可能小的字串t。

例如,當n=6,輸入s="acdbcb"時,輸出t=「abcbcd」。

解決方法很簡單,通過比較s和反轉後的s』 ;哪個小用那個追加到t尾。

int a=0,b=n-1;

while(a<=b)

}if(left)putchar(s[a++]);

else putchar(s[b--]);

這道題有點類似於現實生活中的植物澆灌噴水頭的部署,解題的思路:從最左邊開始考慮,一直向右走,找出 距離為r以內的最遠的點;由於更左的點沒有覆蓋意義,所以應該盡可能覆蓋 更右的點。總之就是,找到乙個點可以覆蓋最大的區域s1,然後標記該點,再找出s1區域結束的最左點;不斷重複迴圈就行。

int i=0,ans=0;

while(i

leetcode刷題筆記 2

給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 ...

挑戰程式設計競賽學習筆記2

書中只給出演算法函式,程式所用資料預設已讀入程式並儲存在全域性變數中。以高效演算法為目標,需要正確估算各種演算法的複雜度。縮短執行時間,主要應該從複雜度入手。程式都從標準輸入按指定格式讀入資料 輸入資料已經由main函式讀入並儲存在全域性變數中 通過呼叫solve函式來求解 在設計滿足問題要求的演算...

微軟程式設計之美2013全國挑戰賽 複賽 第2題

include 微軟程式設計之美2013全國挑戰賽複賽第2題 由於比賽結束後,提交入口關閉,沒來得及提交,但本地資料測試是沒錯的,不知道能否ac include includeusing namespace std struct yingxiangli int main else for int n...