cf1065c

一道贪心题,英语阅读理解能力还是需要提升啊,读懂题就花了很长时间。写的时候想清楚再写,不然相当于纯写废代码了。还有就是注意初始化相关的错误。
观察数据范围,直接拿数组记录每个高度的塔数,然后从末尾开始遍历,就可以得到答案。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

using namespace std;
int h[200050];
int (){
ios::sync_with_stdio(false);
cin.tie(0);
int n, k, min_h = 200050;
cin>>n>>k;
while(n--){
int tmp;cin>>tmp;h[tmp]++;min_h=min(min_h, tmp);
}
int ans = 0, sub_sum = 0, sub_num = 0;
for(int i = 200000; i > min_h; i--){
sub_num += h[i];
if(sub_sum+sub_num > k){
ans++;
sub_sum = sub_num;
}else{
sub_sum += sub_num;
}
}
if(sub_sum) ans++;
cout<<ans<<endl;
return 0;
}