BZOJ2298:[HAOI2011]problem a——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=2298
https://www.luogu.org/problemnew/show/P2519
一次考试共有n个人参加,第i个人说:“有ai个人分数比我高,bi个人分数比我低。”问最少有几个人没有说真话(可能有相同的分数)
好题啊,以及我的dp为什么这么烂……算了吐槽放后面。
参考洛谷题解。
显然a+b+1>n一定是谎话,直接特判。
然后考虑冲突,显然两人名次相同的情况下a和b不同就说明这两人只能取1个/种(因为名次相同且a和b相同则可能有相同分数。)
为了更好表示,我们另[l,r]表示按照成绩排序后这个人位于这些人的[l,r]区间内,对这个区间赋予说真话人数的价值。
则当同一类人超过r-l+1个时显然只有r-l+1人说了真话。
以及重叠的多个区间间只能取一个。
我们dp做即可,具体可以看代码。(吐槽放代码后面了。)
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1e5+;
inline int read(){
int X=,w=;char ch=;
while(!isdigit(ch)){w|=ch=='-';ch=getchar();}
while(isdigit(ch))X=(X<<)+(X<<)+(ch^),ch=getchar();
return w?-X:X;
}
struct people{
int l,r;
}p[N];
struct line{
int l,r,v;
}q[N];
int f[N],nxt[N],cnt,tot=,num,n;
inline bool cmp1(people a,people b){
return a.l<b.l||(a.l==b.l&&a.r<b.r);
}
inline bool cmp2(line a,line b){
return a.r<b.r||(a.r==b.r&&a.l<b.l);
}
int main(){
n=read();
for(int i=;i<=n;i++){
int a=read(),b=read();
if(a+b+>n)continue;
p[++cnt].l=a+;p[cnt].r=n-b;
}
sort(p+,p+cnt+,cmp1);
for(int i=;i<=cnt+;i++){
if(p[i].l==p[i-].l&&p[i].r==p[i-].r)tot++;
else{
q[++num].l=p[i-].l;q[num].r=p[i-].r;
q[num].v=min(tot,p[i-].r-p[i-].l+);
tot=;
}
}
sort(q+,q+num+,cmp2);
for(int i=;i<=num;i++){
int l=,r=i-;
while(l<r){
int mid=(l+r+)>>;
if(q[mid].r<q[i].l)l=mid;
else r=mid-;
}
nxt[i]=l;
}
for(int i=;i<=num;i++){
f[i]=max(f[i-],f[nxt[i]]+q[i].v);
}
printf("%d\n",n-f[num]);
}
吐槽:我前面基本都想到了,连判断矛盾的dp都想到了,真的就两个人之间要怎么判断是否矛盾没想到了。
当然可以按照我的思路来做,也可以转化为l和r来做,相比较来说后者更不好想,但理解起来更简单。
+++++++++++++++++++++++++++++++++++++++++++
+本文作者:luyouqi233。 +
+欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/+
+++++++++++++++++++++++++++++++++++++++++++
BZOJ2298:[HAOI2011]problem a——题解的更多相关文章
- BZOJ2298: [HAOI2011]problem a
		
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2298 题解:刚开始思考的方向错了...一直在想LIS什么的,又发现不合法的情况不好判断,真是个 ...
 - BZOJ2301:[HAOI2011]Problem b——题解
		
http://www.lydsy.com/JudgeOnline/problem.php?id=2301 https://www.luogu.org/problemnew/show/P2522 对于给 ...
 - BZOJ2298 [HAOI2011]problem a  【dp】
		
题目 一次考试共有n个人参加,第i个人说:"有ai个人分数比我高,bi个人分数比我低."问最少有几个人没有说真话(可能有相同的分数) 输入格式 第一行一个整数n,接下来n行每行两个 ...
 - [BZOJ2298] [HAOI2011] problem a (dp)
		
Description 一次考试共有n个人参加,第i个人说:“有ai个人分数比我高,bi个人分数比我低.”问最少有几个人没有说真话(可能有相同的分数) Input 第一行一个整数n,接下来n行每行两个 ...
 - BZOJ2298: [HAOI2011]problem a(带权区间覆盖DP)
		
Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1747 Solved: 876[Submit][Status][Discuss] Descripti ...
 - 【动态规划】bzoj2298: [HAOI2011]problem a
		
建模超级妙…… Description 一次考试共有n个人参加,第i个人说:“有ai个人分数比我高,bi个人分数比我低.”问最少有几个人没有说真话(可能有相同的分数) Input 第一行一个整数n,接 ...
 - [HAOI2011]Problem b 题解
		
题目大意: 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y)=k. 思路: 设f(k)为当1≤x≤n,1≤y≤m,且n≤m,使gcd(x,y)=k的数对 ...
 - 【BZOJ2298】[HAOI2011]problem a DP
		
[BZOJ2298][HAOI2011]problem a Description 一次考试共有n个人参加,第i个人说:“有ai个人分数比我高,bi个人分数比我低.”问最少有几个人没有说真话(可能有相 ...
 - BZOJ2301: [HAOI2011]Problem b[莫比乌斯反演 容斥原理]【学习笔记】
		
2301: [HAOI2011]Problem b Time Limit: 50 Sec Memory Limit: 256 MBSubmit: 4032 Solved: 1817[Submit] ...
 
随机推荐
- MyBatis-SELECT基本查询
			
1.返回一个LIST <!-- public List<Employee> getEmpsByLastNameLike(String lastName); --> <!- ...
 - 限时购校验小工具&dubbo异步调用实现限
			
本文来自网易云社区 作者:张伟 背景 限时购是网易考拉目前比较常用的促销形式,但是前期创建一个限时购活动时需要各个BU按照指定的Excel格式进行选品提报,为了保证提报数据准确,运营需要人肉校验很多信 ...
 - 分布式部署Apache-Jmeter粗略流程
			
注意事项 Windows版和Mac版Jmeter可互相通信 确认被部署的机器安装有JDK并已配置好环境变量 Controller安装 1. 安装Jmeter,监视插件JMeterPlugins-Sta ...
 - selenium元素定位(三)
			
使用selenium就不可避免的要提到界面元素定位,通过元素定位来实现一系列的逻辑操作. selenium提供了8中元素定位的方式: id.name.class name.tag name.link ...
 - JVM监控远程服务器
			
1. 首先配置服务器端,进入服务器tomcat的bin目录下,打开catalina.sh配置文件,xxx为服务器配置路径. # cd /xxx/apache-tomcat-/bin # vim cat ...
 - C 计算员工工资
			
#include <stdio.h> int main(int argc, char **argv) { //定义四个变量 g每小时固定的工资 40 固定工作时间 pay工资 hours员 ...
 - CSP201312-2:ISBN号码
			
引言:CSP(http://www.cspro.org/lead/application/ccf/login.jsp)是由中国计算机学会(CCF)发起的"计算机职业资格认证"考试, ...
 - 【MySQL解惑笔记】忘记MySQL数据库密码
			
破解MySQL密码 一.MySQL5.7.5之前 只要有系统root密码就可以破解: [root@host- ~]# vim /etc/my.cnf //在配置文件中加入如下内容 [mysqld] s ...
 - Python基础框架和工具
			
最近在学Python金融大数据分析,在安装Python进行大数据分析的环境时遇到很多问题,例如:在安装pandas包时候就要到各种错误,总是缺少很多安装包,最后发现利用Python的Anaconda进 ...
 - 剑指offer-二叉树中和为某一值的路径24
			
题目描述 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.(注意: 在返回值的list中,数组长度大 ...