cf题面

- 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<stdio.h>
#include<algorithm>
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.need;
}
else return change>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<p[i].need) ok=0;
r+=p[i].change;
if(r<0) ok=0;
}
puts(ok?"YES":"NO");
return 0;
}

Codeforces 1203F1 Complete the Projects (easy version)的更多相关文章

  1. Codeforces 1203F2. Complete the Projects (hard version)

    传送门 首先对于 $b>0$ 的工作显然有个贪心,把 $b>0$ 的按 $a$ 从小到大排序 把能做的都做了,然后得到一个最大等级 剩下就是考虑 $b<0$ 的工作了,看到数据显然可 ...

  2. Codeforces 1077F1 Pictures with Kittens (easy version)(DP)

    题目链接:Pictures with Kittens (easy version) 题意:给定n长度的数字序列ai,求从中选出x个满足任意k长度区间都至少有一个被选到的最大和. 题解:$dp[i][j ...

  3. CF1203F2 Complete the Projects (hard version)(结论+背包+贪心)

    题目 做法 对于加分的直接贪心 而掉分的用排序后的背包动规 假设有两个物品\((a_1,b_1)(a_2,b_2)\) 选第一个物品后无法选择第二个物品,假设开始值为\(r\):\(r>a_1, ...

  4. Codeforces1203F2. Complete the Projects (hard version) (贪心+贪心+01背包)

    题目链接:传送门 思路: 对于对rating有提升的项目,肯定做越多越好,所以把$b_{i} >= 0$的项目按rating要求从小到大贪心地都做掉,得到最高的rating记为r. 对于剩余的$ ...

  5. Complete the Projects

    F1. Complete the Projects (easy version) F2. Complete the Projects (hard version) 参考:Complete the Pr ...

  6. Codeforces Round #540 (Div. 3) D1. Coffee and Coursework (Easy version) 【贪心】

    任意门:http://codeforces.com/contest/1118/problem/D1 D1. Coffee and Coursework (Easy version) time limi ...

  7. Codeforces Round #540 (Div. 3) F1. Tree Cutting (Easy Version) 【DFS】

    任意门:http://codeforces.com/contest/1118/problem/F1 F1. Tree Cutting (Easy Version) time limit per tes ...

  8. Codeforces Round #521 (Div. 3) F1. Pictures with Kittens (easy version)

    F1. Pictures with Kittens (easy version) 题目链接:https://codeforces.com/contest/1077/problem/F1 题意: 给出n ...

  9. Codeforces Round #599 (Div. 2) B1. Character Swap (Easy Version) 水题

    B1. Character Swap (Easy Version) This problem is different from the hard version. In this version U ...

随机推荐

  1. Python xlsxwriter库 图表Demo

    折线图 import xlsxwriter # 创建一个excel workbook = xlsxwriter.Workbook("chart_line.xlsx") # 创建一个 ...

  2. [ASP.NET] [JS] GridView点击高亮当前选择行,并在点击另一行时恢复上一选择行背景颜色

    在ASP.NET中的gridview控件里面可以通过设定其OnRowDataBound事件来进行实现高亮当前行的操作 前端控件的设置: 只要设置好OnRowDataBound属性即可,会自动在.cs文 ...

  3. windows编程 使用C++实现多线程类

    有时候我们想在一个类中实现多线程,主线程在某些时刻获得数据,可以“通知”子线程去处理,然后把结果返回.下面的实例是主线程每隔2s产生10个随机数,将这10随机数传给多线程类,让它接收到数据后马上打印出 ...

  4. Spring MVC 中使用AOP 进行事务管理--注解实现

    注解实现实现事务管理很简单,和配置式差不多,配置文件的头文件也要加相应的支持.配置数据源,并开启事务管理支持即可. <bean id="transactionManager" ...

  5. Spring是如何使用责任链模式的?

    关于责任链模式,其有两种形式,一种是通过外部调用的方式对链的各个节点调用进行控制,从而进行链的各个节点之间的切换. 另一种是链的每个节点自由控制是否继续往下传递链的进度,这种比较典型的使用方式就是Ne ...

  6. 赛道修建 NOIP 2018 d1t3

    题目大意 最小值最大 考虑二分 二分答案 判断能不能构成m条路径 很明显满足单调性 可行 思考如何判断 对于一个节点 它的儿子会传上来一些路径 这些路径只有三种处理方式 一.传上去(只能传一条) 二. ...

  7. async 异步抓取 花瓣网高清大图 30s爬取500张

    废话 不多说,直接上代码,不懂得看注释 先安装  pip install aiohttp "异步抓取花瓣网图片" # pip install aiohttp import requ ...

  8. 史上最简单JS复制功能,兼容安卓ios!

    1.JS复制原理: 被复制内容的元素不能被其他元素遮盖,否则无效.  (设置opacity透明为0,不可以设置display:none); 2.常规的复制方法 function copyUrl2() ...

  9. centos7 部署zabbix服务器端

    zabbix服务器端搭建与部署: 1.部署LAMP环境由于zabbix提供集中的web监控管理界面,因此服务在web界面的呈现需要LAMP架构支持.php 连接mysql服务,因为7版本mysql要收 ...

  10. 清北学堂提高组突破营游记day5

    长者zhx来啦.. (又要送冰红茶了...) zhx一上来就讲动态规划...是不是要逼死人.... 动态规划: 最简单的例子:斐波那契数列.因为他是递推(通项公式不算)的,所以前面的已经确定的项不会影 ...