CF貪心刷題記錄

2021-07-30 13:58:49 字數 2674 閱讀 7864

339a:把乙個由數字和加號組成的字串按照數字從小到大的順序排序

思路:把字串s中的所有+過濾掉,然後對數字排序輸出。

160a:給n個物品,每件物品有乙個價值,現在要求選擇最少的物品使得你所選擇的物品價值和大於剩餘物品的價值和

思路:排序,按照價值從大到小貪心

58a:給乙個字串,判斷是否刪除若干位可以形成hello

思路:從頭開始刪除,直到第一位是h,第二位是e,第三四位是ll,最後一位是o

337a:從m個數中選出n個數,使得這n個數中最大與最小的差在所有的c(m, n)組中最小

思路:把這m個數排序,然後列舉起始點,在m - n + 1組中找最小即可。

469a:有n層,a可以到達其中的p層,b可以到達其中的q層,問a,b是否可以到達所有樓層。

思路:開乙個陣列標記第i層是否可以到達,最後掃瞄一遍每一層

405a:乙個看起來很顯然的排序

230a:桐人有乙個力量值,有n個boss, 每個boss有力量值和經驗值,如果桐人的力量值大於boss的力量值,那麼桐人擊敗

這個boss並且獲得boss經驗值的力量值獎勵(注意是力量值而不是體力值。。)

思路:按照boss力量排序,優先打力量低的一定不會虧。

432a:3人一組,乙個人最多參加wf 5次,給n個人和每個人參加已經的次數, 求最後有多少組隊伍可以完成k次比賽

思路:對每個人的次數加上k判斷是否小於等於5, 大於的話就淘汰,剩下的人數除以3就是結果

490a:3人一組,每個人擅長不同的方面,現在問能夠最多選出多少組

思路:針對每個人的特長用3個vector或者乙個二維陣列存一下這個人,然後選出最小的size就是最大能分的組數,然後for迴圈輸出一下就可以了

588a:有n天,第i天需要a[i]千克的肉,第i天的肉價是p[i],肉保質期無限長,求最少花多少錢可以滿足這n天的需求。

思路:第一天的肉是一定要買的,之後記錄下到第i天為止最便宜的肉價,每次乘這一天需要的肉的數量累加即可

556a:給乙個長度為n的01字串,每次可以移除相鄰的不同的兩位字元,問最後剩下的字串的長度是多少

思路:最後剩下的一定全為0或者全為1, 輸出0、1數字差的絕對值即可

149a:給12數,選擇最少的數使得這些數的和大於等於k

思路:排序比較

489a*:給乙個位數和各個位數字之和,求出符合條件的最大和最小非負整數(不含前導0)

思路:考慮最小數:從高位向低位一位一位走,每一位用乙個0~9的迴圈判斷填入這個數是否可行,如果可以就填這個數。最大數反之即可,注意忽略前導0的條件。

439a:演唱n首歌,總共有d分鐘,每首歌需要唱a[i]分鐘,每兩首歌之間有10分鐘的休息時間,乙個人5分鐘可以講乙個笑話,問能否演唱玩所有的歌,如果可以,輸出講笑話的個數,否則輸出-1

思路:d - (n - 1) * 10 - ∑a[i] < 0 的話就不可以完成, 否則輸出 (d - ∑a[i]) / 5即可

489b:給你兩個序列,兩個序列中絕對值不超過1的兩個元素可以組成1組,求最大的組數

思路:排序後不難證明貪心配對即可(前面的不會影響後面的結果)

701a:把n個數兩兩一組分成n/2組,使得每組的和相等,題目保證有解

思路:排序後兩端的數符合在一組的條件,輸出即可

478b:給你n個人,分成m組,每組不能為空,每一組的人互為朋友,問最少和最多有多少對朋友。

思路:由於組合數增長很快,容易猜到(1,1,1,...,n - m + 1)可以得到最多的朋友對數,相對的越平均就會得到越少的對數。會爆int,需要注意一下

349a:有3種面額的貨幣,100, 50, 25, 一張票25, 現在給n個人和每個人買一張票,一開始你沒有錢,問是否能給這n個人全部找錢

思路:用3個計數器記錄每個貨幣的數量,根據第i個人給的金額對應給他找錢即可,如果不可以就輸出no

749a:給乙個數n,把n拆成盡可能多的素數之和

思路:如果n是偶數,那麼輸出為 n/2個2, 否則輸出 n/2 - 1個2和乙個3

732b:給n天每天預定的散步數a[i]和高興數k,要求相鄰2天散步數之和大於等於k,求需要額外增加的散步數和增加後的散步數列

思路:從第二天開始判斷是否需要增加即可

520b:給兩個數n和m,n每一步可以減1或者乘2, 求n到m的最少需要多少步。

思路:正著從n思考如何變道m不是很容易發現他們間的關係,如果反過來考慮,我們每次把m加1或者除以2,,最後要得到n,就能看出乙個重要的關係:如果n >= m,那麼直接輸出n - m就是結果,因為m變小會離n越來越遠;如果n < m,把m分奇偶討論:如果m是偶數,那麼就把m除以2, 否則m先加1在除以2,最後就能得到最少的步數。正著思考的時候因為n為奇和偶的時候都可以乘2,所以不好判斷。

461a::題目看起來挺複雜,有兩個人,乙個長度為n的序列,每一次a把序列的所有和加起來加給總分,然後把序列交給b,b把序列中的某乙個元素加給總分然後刪除,然後再把序列分成兩個非空的部分交給a,重複操作直到序列為空。最後問最大的總分是多少

思路:數值越大的序列盡可能多加,因此去掉的數就應該是每次序列中最小的那個,對序列排序,每次減掉最小的即可。

507a:有n和k兩個數和乙個長度為n的序列,要求找出盡可能多的數使得他們的和不超過k

思路:排序後從小到大累加即可

519c:有n位專家和m位新手,有兩種分配方式,一種是一位專家兩位新手一組,一種是兩位專家一位新手一組,問最多可以分成多少組

思路:如果n * 2 > m, 就按照第二種方式分組,否則按照第一種方式分組

刷題記錄 CF1228A,B,C,D

a題 a distinct digits 800 題目大意 給你兩個數,l和r,問你在l到r之間的數中存不存在每個數字都不相同的數,存在輸出這個數,不存在輸出 1 思路 暴力就完事 includeusing namespace std const int maxn 2e5 10 int a maxn...

cf水題記錄

記錄幾道水題 第一題題目鏈結 題目大意 給 n和m 問1 n裡面m的倍數中個位數的和是多少.某場div3的c題.n m肯定是1 n裡面m倍數的個數.那麼這些數裡面各位數的和怎麼算呢?分析一下可以知道最多10個數後就會進入迴圈.因為0 9只有10個數嘛.可以手動先把每個數的迴圈陣列算出來.當然這是最直...

刷題記錄(LA4850 貪心)

題目 如果是問最大懲罰值的最小值的話,只需要按截止時間從小到大排一下序就可以了。但問的是最大兩個懲罰值的最小值。有點沒辦法,一度以為有什麼操作能直接優化兩個數的和最小,好像不太行。在網上搜了題解看到乙個思路。先按截止時間排序,在嘗試把乙個任務a調到任務b後這樣a 1到b的懲罰值都得到優化而a的懲罰值...