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