博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces 1203F1 Complete the Projects (easy version)
阅读量:5313 次
发布时间:2019-06-14

本文共 1935 字,大约阅读时间需要 6 分钟。

  • Time limit
    2000 ms
  • Memory limit
    262144 kB

解题思路

看见这题觉得贪心可做,那就贪吧。(昨天真是贪心的一天,凌晨才被这两道贪心题虐,下午多校又来,感觉我现在比赛时候想贪心就是瞎猜,猜出一个结论就想办法hack,想不出hack就交上去,然后WA,然后自闭,很难摸到门道)

下面这些是我的做题和思考过程——

显然要先把能加rating和不掉rating的做了,而且要按照要求从低到高的顺序做,因为如果当前rating能满足要求高的,那也能满足要求低的,如果不满足要求高的,那就只能先去做要求低的那些工作以赚取足够的rating,总之先做要求低的赚rating就好。

对于那些掉rating的工作怎么办呢……开始想着类似大于0的部分那样,由于这个阶段rating不断下降,所以先做要求高的。但很容易就把自己hack掉了(r=10;a1=9,b1=-5;a2=8,b2=-1,显然先2后1可以完成全部任务,但按照先做要求高的任务的策略,先1后2,就不能完成任务),然后自闭了……

然后听到机房大佬提出了正确的策略——对于掉rating(\(b_i<0\))的工作,按照\(a_i+b_i\)递减的顺序做就好,没想出来怎么证明,先写了交一发,然后A了。赛后没太看懂,那就尝试用里面不等式的方式构造hack数据。

假设n=2,总共两件工作,不妨假设其满足\(a_2+b_2<a_1+b_1\),而且应该先2后1,不能先1后2,那么经过思考,可以得到这么几个式子——\(r+b_2\geqslant a_1\)\(r+b_1 < a_2\)\(r+b_1+b_2 \geqslant 0\)。前两个式子看着挺像,加起来可以得到\(r+b_2+a_2> r+b_1+a_1\)\(a_2+b_2>a_1+b_1\),诶,然后就和假设矛盾了,于是不能hack(第三个式子都没用到)。

回顾总结一下——对于满足先2后1不能先1后2的两件工作,它们就会满足\(a_2+b_2>a_1+b_1\)这个式子,于是就没了。

从这里我学到了解贪心题的一种思路——解不等式。

有另外一篇题解,感性地解释了这个贪心的道理——

对于价值为正的项目,很明显我们可以直接从小到大的把项目做掉,这样一定是最优的,对于负数来说,我们排差值,差值大的,说明损耗对于自身的损耗较小,这样才能保证自己还有能力做大项目,又能保证做完一个大项目后因为扣的太多而不能去做小项目

虽然还是没太看懂……

吐槽

顺便日常CSDN垃圾。查这场CF的题解的过程中——

百度只查到了一篇这场CF的博文,来自CSDN,点进去并没有看懂,之后各种改关键字,终于多了一点(是不是百度爬虫正好在这段时间里爬过)

  • 打开一篇CSDN上的博文,CSDN下方的相似推荐,推荐出来的东西余弦值之差怕是差180度哦,毛线关系都没有。
  • 打开一篇博客园上的博文,博客园下方的相关博文一栏推荐的5篇博客,4篇是这场CF的题解,另一篇是之前某次的CF题解

所以CSDN收的VIP费用都拿去给百度竞价排名了吗艹

博客园良心啊。

源代码

#include
#include
int n,r;struct P{ int need,change; bool operator < (const P & a) const{//这里貌似写复杂了 if(change<0&&a.change<0) { return change+need>a.change+a.need; } else if(change>=0&&a.change>=0) { if(need==a.need) return change>a.change; return need
a.change; }}p[105];int main(){ scanf("%d%d",&n,&r); for(int i=1;i<=n;i++) scanf("%d%d",&p[i].need,&p[i].change); std::sort(p+1,p+1+n); bool ok=1; for(int i=1;ok&&i<=n;i++) { if(r

转载于:https://www.cnblogs.com/wawcac-blog/p/11359505.html

你可能感兴趣的文章
分享一款在线less转css的神器
查看>>
鼠标放上去下划线跟着滑动
查看>>
linux 压力测试工具 webbench
查看>>
oralce 索引(1)
查看>>
jenkins-APP打包页面展示二维码【转】
查看>>
WebAssembly 上手
查看>>
Upload and Download File using Java
查看>>
ubuntu 创建快捷方式
查看>>
KBMMW 4.80.00 发布
查看>>
菜鸟成长记(十二)----- 生活的意义是什么?
查看>>
MySQL 函数
查看>>
转载 利用WWW类获取图片并且在unityUGUI的Image中显示
查看>>
apache 虚拟ip
查看>>
WinCE发展史
查看>>
CSS3动画
查看>>
分割, =两边为key和value
查看>>
WCF 第二章 契约 同步请求回复操作
查看>>
按Esc键关闭,切换焦点关闭JS
查看>>
数论小常识
查看>>
centos下升级mysql5.5.47到5.7.14操作过程
查看>>