Codeforces 1612C. Keshi Is Throwing a Party

思路

首先容易发现,选择的人数具有单调性,是可以二分的

假设最后答案选了 xxx 个人,那么对于一个人有影响的,就只有了他前面选了多少人,因为前面确定了后面就确定了

更具体地说,如果第 iii 个人是按顺序的第 kkk 个被选,那么 x−k≤aix-k\leq a_ix−k≤ai​ 且 k≤bik \leq b_ik≤bi​ 综合一下可以得到 x−ai≤k≤bix-a_i\leq k\leq b_ix−ai​≤k≤bi​

这个不等式实际上说明了一种贪心的正确性,顺序遍历,能选就选

因为确定 xxx 之后,能否选择仅与 kkk 有关,所以尽量在更小的范围内选更多的人肯定不会更劣

代码

#include <bits/stdc++.h>
using namespace std;std::mt19937 rng(std::random_device{}());
typedef long double ld;
typedef long long ll;
typedef unsigned long long ull;
typedef const int& cint;
typedef const ll& cll;
typedef pair<int, int> pii;
typedef pair<int, ll> pil;#define ls (loc<<1)
#define rs ((loc<<1)|1)const int mod1 = 1e9+7;
const int mod2 = 998244353;
const int inf_int = 0x7fffffff;
const int hf_int = 0x3f3f3f3f;
const ll inf_ll = 0x7fffffffffffffff;
const double ept = 1e-9;int n;
int a[200200], b[200200];bool check(cint x) {int r = 0;for(int i=1; i<=n; i++) if(b[i] >= r && a[i] >= x - r - 1) ++ r;return r >= x;
}int main() {//freopen("1.in", "r", stdin);//cout.flags(ios::fixed); cout.precision(8);ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);int T_=1;std::cin >> T_;for(int _T=1; _T<=T_; _T++) {cin >> n;for(int i=1; i<=n; i++) cin >> a[i] >> b[i];int l = 1, r = n, mid;while(l < r) {mid = l + (r - l + 1) / 2;if(check(mid)) l = mid;else r = mid - 1;}cout << l << endl;}return 0;
}

题外话()

没想到糖糖子明从8分过B开始就被这题卡了3h

实际上,赛中第一眼就是二分,然而草草想过之后发现不知道怎么验证(也就是没看见贪心)

然后就去推结论,还真的推出来一些看上去挺真的,最后竟然归结为求带修第 kkk 小 ()

愤而找了平衡树板子,然后wa2

赛时我是这么想的

考虑当前要加入一个点,有三种冲突情况

如果仅是前面的点导致的冲突(即前面有一个 aia_iai​ 过小),那么就删掉最小的 aia_iai​ 中最靠右的那一个

如果仅是当前的点 bib_ibi​ 过小,那么将当前选择的点的 aia_iai​ 第 size−bisize-b_isize−bi​ 小的点删除,加入此点,意义为如果 111 到 size−bi−1size-b_i-1size−bi​−1 都被删掉了,那么我可以反悔选上这个点,如果没被删掉也不会影响答案

如果都冲突了,就先考虑第一个,然后考虑第二个

隔了一天,仔细一想,错的离谱,主要是删掉一个点会影响到部分点的 aia_iai​ ,有一部分又不会被影响…g

如果哪位大佬有继续往下的思路可以给这位萌新讲解一下,o(╥﹏╥)o

Codeforces 1612C. Keshi Is Throwing a Party相关推荐

  1. Codeforces 1610C Keshi Is Throwing a Party

    题意 Keshi有 nnn 个朋友,第 iii 个朋友有 iii 美元.如果邀请第 iii 个朋友做客,必须满足宴会上最多有 aia_iai​ 个人比他富有,最多 bib_ibi​ 个人比他贫穷. 问 ...

  2. Codeforces-1610 C: Keshi Is Throwing a Party

    Codeforces-1610 C: Keshi Is Throwing a Party 题目传送门:Codeforces-1610 C 题目 题目截图 样例描述 题目大意   Keshi 正在举行一 ...

  3. 1610C - Keshi Is Throwing a Party 题解

    题目传送门: Problem - 1610C - Codeforces 设  中的  表示你所选出的数列的已知最大长度限制,而且是只管右限制的最大长度限制. 比如说第一个数右限制是 4,那么最大长度限 ...

  4. 【二分】C. Keshi Is Throwing a Party

    题目链接: https://codeforces.com/problemset/problem/1610/C n个盆友,第i个盆友有i块钱,小明想尽可能邀请更多的人.第i个人高兴有个条件,比他钱多的不 ...

  5. C. Keshi Is Throwing a Party(二分答案),最/佳牛围栏,average。

    题目链接 题意: 一共n个人,第 i 个人的财富度为 i,每个人有两个属性 ai 和 bi,分别表示最多能够容忍的比自己富和比自己穷的人数. 问,最多能够选多少人,使得所有人的要求都可以满足. 思路: ...

  6. Keshi Is Throwing a Party

    题意 对于第i个人的权值为i,一个人能被加入序列当且仅当,数列中大于i的数至多不超过ai,小于i的数至多不超过bi,问最多能选多少人 题解 很明显的二分答案,那么需要考虑的就是怎么写check了.直接 ...

  7. Codeforces Round #800 (Div. 2) E. Keshi in Search of AmShZ

    题目链接:https://codeforces.com/contest/1694/problem/E 解题思路: 定义dis[i]表示i点到n点所需要的最少天数,我可以尝试去枚举一个点v要走到下一个节 ...

  8. CODEFORCES 272C Dima and Staircase 细节理解题+简单技巧

    传送门:http://codeforces.com/problemset/problem/272/C C. Dima and Staircase time limit per test 2 secon ...

  9. CodeForces 375D Tree and Queries

    传送门:https://codeforces.com/problemset/problem/375/D 题意: 给你一颗有根树,树上每个节点都有其对应的颜色,有m次询问,每次问你以点v为父节点的子树内 ...

最新文章

  1. Nginx Java环境(tomcat)支持
  2. python正则表达式提取电话号码_Python学习笔模式匹配与正则表达式之电话号码和Email地址提取程序...
  3. java list过滤完赋给自己_Java8对list集合进行排序、过滤、分组、去重、转map、遍历赋值等操作...
  4. mysql 查询语句性能优化
  5. opencv双目视觉标定、匹配和测量 (附代码)
  6. python学习socket的客户端实现
  7. C语言基础教程读书笔记5.2.(第五章函数和存储类2)
  8. mysql进阶-01-视图
  9. pacific-atlantic-water-flow(不错)
  10. 动手写procedure以及注意的细节
  11. java nullexception_Java 中 NullPointerException 的完美解决方案
  12. 域用户本地管理员密码破解
  13. Echarts饼状图空心圆技巧 | 爱骇客 | 骇客
  14. 患癌女子为生女儿放弃治疗 圆母亲梦后离世
  15. 文件安全检测--持续更新
  16. 单片机位寻址举例_基于80C51单片机位寻址编程
  17. 对IQueryable和IEnumerable的认识
  18. 可视化拖拽组件库一些技术要点原理分析(三)
  19. 原生爬虫爬取虎牙绝地求生直播热度排行榜
  20. 编号生成之snowflake雪花算法

热门文章

  1. Power BI与Tableau的对比与选择
  2. python中str,int,list,list(str),list(int)的相互转换
  3. JavaScript网页特效-折叠面板
  4. 被裁了!39 岁阿里 P9,攒下 1.5 亿....
  5. OA系统实现(请假审批,mybatis)-1
  6. 基于 Spring Boot 的在线考试系统
  7. 千呼万唤始出来——uFUN开发板2.0开箱评测
  8. rmd中无法打开链结r_十个超级好用的R语言编程技巧,一般人绝不知道!
  9. 高分一号影像处理流程
  10. MT2502 datasheet,MT2502硬件设计,MT2502芯片资料