b題
codeforces 1110b
一開始是沒想出來的。
講的是用k根繃帶粘住n個壞掉的地方,求用最少的繃帶
原本的想法是將每種可能的粘法窮舉出來,求最少的繃帶
但是換個方向看,每個壞掉的地方都要粘住,意味著每處都用了一的繃帶
此時用的繃帶數就是n,每填補兩個壞處之間的距離,就會使得繃帶數減一
要想只用k根繃帶,並且使繃帶總長最短,就是在原本n的繃帶長度上加上n-k個最短距離
於是答案就很簡單了
#include usingnamespace
std;
typedef
long
long
ll;const
int maxn=1e5+7
;int
main()
sort(b+1,b+n);
int ans=0
;
for(int i=1;i<=n-k;i++)
ans+=b[i];
cout
}return0;
}
d題codeforces 1111b
d題一開始也沒想出來
講的是給出n個超級英雄的能量,操作是減少乙個英雄或增加乙個英雄的1點能量
每個英雄最多操作k次,總共操作最多m次,求最大的平均能量
感覺可以算,但不知道怎麼算
實際上這個題思路應該是乙個個試
首先留下第一強的英雄,如果總算子少於剩下的英雄數(想刪掉剩下的英雄),就繼續新增強的英雄
因為無論怎麼操作,都不能去掉目前新增的這些英雄
為什麼第一目的的刪掉英雄而不是強化英雄呢
是因為理想情況下能量n和n-1的英雄,刪掉弱的後平均值是n,強化一點後平均值是n
而當強的英雄和弱的英雄差距變大時,刪掉弱的增長更快
而當總算子不少於剩下的英雄數時,就可以考慮刪掉剩下的英雄
將剩下的英雄全部刪掉,多出的操作強化目前的英雄,求得這種狀況下的平均值
接著不斷加入新的強英雄,刪掉剩下的英雄,求得當前情況下的平均值
最後比較得到最大的平均值
#includeusingnamespace
std;
const
int nmax=1e6+7
;typedef
long
long
ll;int
a[nmax];
intmain()
ll sum=0
;
double ans=0
; sort(a+0,a+n);
for(int i=n-1;i>=0;i--)
}printf(
"%lf
",ans);
return0;
}
e題codeforces 1108b
e題是給出x,y(x<=y)的因子,讓我們還原這兩個數
這就需要思考一下
乙個數的因子包含自己,所以這堆數里最大的數就是y
接下來又分成幾種情況
x是y的因子
那麼出現兩個相鄰且相等的數就是x
x不是y的因子
那麼出現乙個不是y因子的數就是x
#include usingnamespace
std;
intmain()
else
if(d[i]==d[i-1]||d[i]==d[i+1
])
}}
寒假集訓系列DAY 1
problem a.string master master.c cpp pas 題目描述 所謂最長公共子串,比如串 a abcde 串 b jcdkl 則它們的最長公共子串為串 cd 即長 度最長的字串,且在兩個串中都作為連續子串出現過。給定兩個長度都為 n 的字串,對於字串大師的你來說,求它們的...
寒假ACM集訓複習總結Day3 helman
這一天學的是貪心演算法和暴力列舉 感覺比第一天的思維題還簡單,也許是因為全部列出來是人的普遍想法吧 那就放幾個經典例題吧 hdu 2037 一道經典的看電視的問題,給出一系列節目的開始結束時間,算出你最多能看幾部 思路是要對每個節目的結束時間從小到大排序,每次選擇結束時間早的不和上乙個節目衝突的節目...
2020寒假集訓Day1 分治 總結
已經會了東西就略過了 下面就是自己新學會的 1 d維數點的bitset暴力方法 o d n 2 w 每個點開d個bitset,分別排序遞推,然後把答案 起來即可 乙個trick bitset按編號分塊,多做幾次,可以節省記憶體,例題 傳遞閉包 想想我以前只會o d n 2 2 cdq分治解決動態凸殼...