Codeforces-1610 C: Keshi Is Throwing a Party

题目传送门:Codeforces-1610 C

题目

题目截图

样例描述

题目大意

  Keshi 正在举行一个Party,他有 nnn 个朋友,第 iii 个朋友有 iii 美元。
  但这些朋友既仇富又仇贫,如果有超过 aia_iai​ 个比他富有的人或者超过 bib_ibi​ 个比他穷的人参加Party,他就会不开心。Keshi想让他Party上的每个朋友都开心,问他最多能邀请多少人。

题目解析

  首先我们检查可行人数是否是单调的,i.e. 是否随着人数的增加而越来越不可能。直观上确实是这样,因为假设我们有了一个合法的邀请人序列,不论我们移除掉序列中的哪个,都不会有人会变得不开心,因为只有比他富有的人多了,或者穷的人多了,才可能增加不开心的人数。如此一来,合法序列的长度一定是单调的,即,给定一个序列长度,若存在一序列合法,则会有比它短的序列也合法,若不合法,则比它长的序列也不合法。如此,我们可以二分这个序列的长度,之后检测其是否合法。
  那么如何检测给定序列长度是否存在一个合法的序列呢。我们可以每次都选择最穷的,可加入的朋友加入到序列中(注意可加入的判断与序列长度有关),来看长度是否能够达到给定长度。不妨假设序列长度为 ttt,设一合法序列为 s=s1s2⋯st(t>n)s=s_1s_2\cdots s_t (t \gt n)s=s1​s2​⋯st​(t>n),最小的序列为 p=p1p2⋯pnp=p_1p_2\cdots p_np=p1​p2​⋯pn​,即假设最小序列达不到指定序列长度,但存在一个序列能达到。根据假设,有 pi≤sip_i \le s_ipi​≤si​。若 ppp 与 s1⋯ss_{1\cdots s}s1⋯s​ 全等,则根据选择方式,显然 ppp 的长度不应是 nnn,因为 ppp 至少应能再扩展一位,矛盾。但若 ppp 与 sss 不全等,意味着存在 pi>sip_i \gt s_ipi​>si​,也矛盾。所以在给定选择序列的长度后,不存在一个序列比最小序列更长。这样我们遍历一遍便可以检查出序列长度是否合法。

Code

#include <bits/stdc++.h>
using namespace std;const int maxn = 2e5 + 7;
int a[maxn], b[maxn];bool check(const int& x, const int& n) {int cnt = 0;for(int i=0; i<n; ++i)if (x-1-a[i] <= cnt && cnt <= b[i]) ++cnt;return cnt >= x;
}int main(){int t, n;cin >> t;while(t--) {cin >> n;for(int i=0; i<n; ++i) cin >> a[i] >> b[i];int l = 0, r = n + 1, mid;while(r - l > 1) {mid = (l + r) >> 1;if(check(mid, n)) l = mid;else r = mid;}cout << l << endl;}return 0;
}

Codeforces-1610 C: Keshi Is Throwing a Party相关推荐

  1. Codeforces 1612C. Keshi Is Throwing a Party

    Codeforces 1612C. Keshi Is Throwing a Party 思路 首先容易发现,选择的人数具有单调性,是可以二分的 假设最后答案选了 xxx 个人,那么对于一个人有影响的, ...

  2. Codeforces 1610C Keshi Is Throwing a Party

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

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

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

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

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

  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. Android 开源框架 ( 十六 ) 视频播放器 --- JiaoZiVideoPlayer(JieCaoVideoPlayer)
  2. js中的new file_深受 Pandas 启发的 JavaScript 开源库 — Danfo.js 现已推出!
  3. Tungsten Fabric SDN — 与 Bare Metal 的集成架构
  4. 计算机系学生thinkbook,ThinkBook系列性能差,只能当一台学习机?其实它只是专注于办公...
  5. .NET异步方法调用的例子
  6. TabActivity中的Tab标签详细设置
  7. leetcode 583. Delete Operation for Two Strings | 583. 两个字符串的删除操作(最长公共子序列,DP)
  8. ns2相关学习——TCL脚本编写(2)
  9. Wampserver的安装与配置笔记
  10. emacs(考场+平时)配置方案
  11. oracle往游标中存数据,Oracle数据库:ORACLE11G在存储过程里面遍历游标
  12. Server(Iocp)的那些烦恼
  13. 局域网中的几大分类,包含以太网,FDDI网,令牌环网,ATM网
  14. SpringBoot 2.X 整合 J2cache 一级缓存 ehcache3 二级缓存 redis (含使用demo实例)
  15. 服务器装win7没有硬盘分区,深度win7安装没有磁盘分区怎么办?
  16. android x86 uefi 安装教程,如何在Hyper-V上安装android-x86系统
  17. 机器学习准备数据时如何避免数据泄漏
  18. 中国移动合肥移动面试总结(计算机类)
  19. 如何一键导出PPT中的所有图片
  20. 小猪o2o生活通系统安装后空白页面是什么原因怎么解决?

热门文章

  1. python 字符串输出时 使用空格隔开
  2. 国内最前沿的科技——室内导航技术发展及其现状
  3. 融合通信技术趋势和演进方向 | QCon2021云信专场
  4. 【Maven】创建模块时出现Invalid packaging for parent POM
  5. 在外远程登录公司内网OA系统
  6. 阿里云IMM智能媒体文件预览
  7. C语言获取股票数据,c/c++开发分享获取贵州茅台2010年1月1号至今的股票交易数据,计算该股票历史数据的5日均线和30日均线...
  8. html5 横向溢出隐藏,溢出:隐藏的HTML5视频
  9. slf4j报错:SLF4J:Failed to load class org.slf4j.impl.StaticLoggerBinder.Defaulting to no-operat有效解决办法
  10. glog logging library for C++