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] ...
随机推荐
- linux下实现ssh无密码登录访问
在192.168.9.51机器上 1)运行:#ssh-keygen -t rsa 2)然后拍两下回车(均选择默认) 3)运行: #ssh-copy-id -i /root/.ssh/id_rsa.pu ...
- 『Python Kivy』API说明:kivy.app.App
App类是创建Kivy应用的基础.我们可以将其看成是Kivy运行循环当中的主入口.在绝大多数的例子中,你创建这个类的子类,然后构建你自己的应用.当你已经准备好开始应用的整个生命周期时,你可以实例化你定 ...
- ReadyAPI 教程和示例(二)
声明:如果你想转载,请标明本篇博客的链接,请多多尊重原创,谢谢! 本篇使用的 ReadyAPI版本是2.5.0 接上一篇: 4.修改SoapUI测试 本节将演示如何为测试用例添加测试步骤以及更改请求参 ...
- wpf基础使用_修改窗体图标
废话不多说,直接开始修改图标步骤: 当然直接使用绝对路径添加图标也是可以的,这种方式不可取,一旦图标移动位置或被删除,就会导致找不到图标文件报错,这里我们介绍的是另一个方式,使用资源文件的方式添加 1 ...
- H5应用程序缓存浅谈及实际测试
应用程序缓存能做什么? 可以在脱离网络的条件下离线访问. 减少读取服务器文件,减轻服务器的访问压力. 优化网站打开速度. 如何启用应用缓存? 第一步:给服务器添加新的MIME:扩展名:.appcach ...
- leetcode-第k个排列(Java和c++版)
第k个排列 给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列. 按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下: "123" " ...
- 204. Singleton
Description Singleton is a most widely used design pattern. If a class has and only has one instance ...
- Java进阶知识点:不要只会写synchronized - JDK十大并发编程组件总结
一.背景 提到Java中的并发编程,首先想到的便是使用synchronized代码块,保证代码块在并发环境下有序执行,从而避免冲突.如果涉及多线程间通信,可以再在synchronized代码块中使用w ...
- HDU 1403 Longest Common Substring(后缀自动机——附讲解 or 后缀数组)
Description Given two strings, you have to tell the length of the Longest Common Substring of them. ...
- 业务迁移---redis
以前也没怎么搞过redis 只知道他是一个nosql数据库很强大,这次迁移用到了~ 正好熟练一下并记录过程,还挺繁琐.. 记录一下在学习中的几个问题,总结加深一下印象,有可能会漏掉或者有误差的地方~ ...