Educational Codeforces Round 131 (Rated for Div. 2)

1|0基本情况

AB秒了。C知道是二分答案,check死活写不出来。

2|0C. Schedule Management

Problem - C - Codeforces

2|1错误分析

这题比较绕,搞了一个对应关系,大脑转不过来。

写check的时候完全想不出合理的思路。

很明显的要用桶来计数,但是怎么用不知道了。

看了题解后发现,check不能遍历任务来检测,而是通过遍历工人来检测。

2|2正确思路

对于 check 函数,我们先记录每个工人所擅长的工作数量 cnti

然后我们贪心,如果有擅长的工作就先去做,经分析有以下两种情况。

  • 如果 xcnti,那么他能完成 x 项工作(每项工作 1 小时)。
  • 否则,就先干擅长的 cnti 项,后干不擅长的 xcnti2 (每项工作 2 小时)。

最后我们把干完的工作数量和 m 比较即可。

3|0代码

bool check(int t) { long long sum = 0; for (int i = 1; i <= n; i++) { if (cnt[i] >= t) sum += t; else sum += cnt[i] + (t - cnt[i] >> 1); } return sum >= m; } void solve() { std::cin >> n >> m; memset(cnt, 0, sizeof(cnt)); for (int i = 1; i <= m; i++) std::cin >> a[i], cnt[a[i]]++; int l = 1, r = m << 1, mid; while(l <= r) { mid = l + (r - l >> 1); if (check(mid)) r = mid - 1; else l = mid + 1; } std::cout << r + 1 << std::endl; }

__EOF__

本文作者Kdlyh
本文链接https://www.cnblogs.com/kdlyh/p/17910468.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   加固文明幻景  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示