清北学堂例题 LUOGU2519 【HAOI2011】PROBLEM A
题目描述
一次考试共有n个人参加,第i个人说:“有ai个人分数比我高,bi个人分数比我低。”问最少有几个人没有说真话(可能有相同的分数)
输入格式
第一行一个整数n,接下来n行每行两个整数,第i+1行的两个整数分别代表ai、bi
输出格式
一个整数,表示最少有几个人说谎
输入输出样例
3
2 0
0 2
2 2
1
说明/提示
100%的数据满足: 1≤n≤100000 0≤ai、bi≤n
思路:
转变题意:题目中的 ai bi 表示从1+ai 到 n-bi排名区间内的同学的分数相同,且与不属于该区间的同学分数一定不同。
考虑补集思想:最少说假话人数=总人数-最多说真话人数
而又显然:如果两个区间相交但不重合,则发生冲突。
比如一个人说第三名和第四名的成绩相同,另一个说第四名和第五名成绩相同,则必然有一个人说了假话
考虑给区间赋上权值:一个区间的权值=本质相同的区间总数,且最大为区间长度。
比如有五个人都说自己的排名是第三到第五名,则至多三个同学说真话。
于是题目就变成了一个区间覆盖问题qvq 求权值最大且互不相交的区间覆盖
DP即可。注意和【今年暑假不AC】不同,由于区间带权,不能直接贪心(爆零警告)
先以右端点为第一关键字,左端点为第二关键字排序。
定义DP [ i ] 表示右端点覆盖到 i 的合法方式最大权值。
dp[ r [ i ] ] = max (dp [ l [ i ] ] + w[ i ],dp [ r [ i ] ] ) ;
dp[ i ] = max ( dp [ i - 1 ] , dp [ i ] ) ;
值得一提的是第二个转移必须要在 i 之前的①转移都已完成(也即i<=当前右端点)。注意转移顺序,具体见代码(貌似又写丑了orz)
时间复杂度O(nlogn)
#include <cstdio>
#include <algorithm>
#include <iostream>
using namespace std; const int maxn=; int dp[maxn];
struct node{
int l,r,w;
}a[maxn]; inline bool cmp(node a,node b) {
if (a.r==b.r) return a.l<b.l;
return a.r<b.r;
} inline void init(int n) {
int cnt_l=,cnt_r=,cnt_val=;
for (int i=;i<=n;i++) {
int now_l=a[i].l,now_r=a[i].r;
if (now_l!=cnt_l || now_r!=cnt_r) {
cnt_val=;
cnt_l=now_l,cnt_r=now_r;
}
cnt_val++;
a[i].w=min(cnt_val,now_r-now_l+);
}
} int main() {
int n;
scanf("%d",&n);
for (int i=;i<=n;i++) {
int x,y;
scanf("%d%d",&x,&y);
a[i].l=x+,a[i].r=n-y;
}
sort(a+,a+n+,cmp);
init(n);
int cnt=;
for (int i=;i<=n;i++) {
if (a[i].r<a[i].l) continue;
if (a[i].r>cnt) {
for (int j=cnt+;j<=a[i].r;j++) dp[j]=max(dp[j],dp[j-]);
cnt=a[i].r;
}
int l=a[i].l,r=a[i].r;
dp[r]=max(dp[r],dp[l-]+a[i].w);
}
if (n>cnt) for (int i=cnt+;i<=n;i++) dp[i]=max(dp[i],dp[i-]);
cout << n-dp[n];
}
清北学堂例题 LUOGU2519 【HAOI2011】PROBLEM A的更多相关文章
- 清北学堂例题 LUOGU2523【HAOI2011】problem c
题目描述 给n个人安排座位,先给每个人一个1~n的编号,设第i个人的编号为ai(不同人的编号可以相同),接着从第一个人开始,大家依次入座,第i个人来了以后尝试坐到ai,如果ai被占据了,就尝试ai+1 ...
- 清北学堂2017NOIP冬令营入学测试P4745 B’s problem(b)
清北学堂2017NOIP冬令营入学测试 P4745 B's problem(b) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试 描述 题目描 ...
- 清北学堂2017NOIP冬令营入学测试 P4744 A’s problem(a)
清北学堂2017NOIP冬令营入学测试 P4744 A's problem(a) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试题,每三天结算 ...
- 清明培训 清北学堂 DAY1
今天是李昊老师的讲授~~ 总结了一下今天的内容: 1.高精度算法 (1) 高精度加法 思路:模拟竖式运算 注意:进位 优化:压位 程序代码: #include<iostream>#in ...
- 7月清北学堂培训 Day 3
今天是丁明朔老师的讲授~ 数据结构 绪论 下面是天天见的: 栈,队列: 堆: 并查集: 树状数组: 线段树: 平衡树: 下面是不常见的: 主席树: 树链剖分: 树套树: 下面是清北学堂课程表里的: S ...
- 济南清北学堂游记 Day 1.
快住手!这根本不是暴力! 刷了一整天的题就是了..上午三道题的画风还算挺正常,估计是第一天,给点水题做做算了.. rqy大佬AK了上午的比赛! 当时我t2暴力写挂,还以为需要用啥奇怪的算法,后来发现, ...
- AC日记——C’s problem(c) TYVJ P4746 (清北学堂2017冬令营入学测试第三题)
P4746 C’s problem(c) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试 描述 题目描述 小C是一名数学家,由于它自制力比 ...
- 清北学堂2017NOIP冬令营入学测试P4749 C’s problem(c)
P4746 C's problem(c) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试 描述 题目描述 小C是一名数学家,由于它自制力比较差 ...
- 清北学堂入学测试P4751 H’s problem(h)
P4751 H’s problem(h) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试 描述 小H是一个喜欢逛街的女孩子,但是由于上了大学 ...
随机推荐
- idea激活,使用破解补丁无需注册码
idea激活,使用破解补丁无需注册码 2017年08月19日 10:57:54 标签: idea / 破解 / 补丁 / 软件 / 13891 编辑 删除 idea激活,JetBrain旗下软件激活 ...
- word2vec 构建中文词向量
词向量作为文本的基本结构——词的模型,以其优越的性能,受到自然语言处理领域研究人员的青睐.良好的词向量可以达到语义相近的词在词向量空间里聚集在一起,这对后续的文本分类,文本聚类等等操作提供了便利,本文 ...
- Python 文件和目录操作学习
文件与文件路径 文件有两个关键属性:文件名和路径. 路径指明了文件在计算机上的位置. 文件名中,最后一个句点之后的部分称为文件的"扩展名",它指出了文件的类型 目录也叫文件夹,文件 ...
- 8个问题全面了解5G关键技术Massive MIMO
1 什么是Massive MIMO Massive MIMO(大规模天线技术,亦称为Large Scale MIMO)是第五代移动通信(5G)中提高系统容量和频谱利用率的关键技术.它最早由美国贝尔实验 ...
- uniapp - 导航切换(样式)
<view class="text-area" v-for="(menu,i) in menus" :key="i" v-show=& ...
- C++11 — lambda表达式(匿名函数)
C++11中lambda表达式的基本语法格式为: [capture](parameters) -> return_type { /* ... */ } 其中 [] 内为外部变量的传递方式: [] ...
- yolo系列目标检测+自标注数据集进行目标识别
1. yolov1的识别原理 参考:https://blog.csdn.net/u010712012/article/details/85116365 https://blog.csdn.net/gb ...
- linux命令系列-mv(移动-重命名)
#常用命令选项 默认覆盖 -n 不覆盖 -i 交互 -f 不交互直接覆盖 -u 只移动新的文件 -v 显示详细信息 #移动覆盖3个文件到/tmp目录 mv a.txt b.txt c.txt /tmp ...
- 洗牌函数[打乱数组的顺序] slice()的新运用 [原来arr.slice(start, end) 的start不是必需的]
function getRandomInt(min, max) { return Math.floor(Math.random() * (max - min + 1) + min) } functio ...
- 「NOIP2009」Hankson的趣味题
题目描述 (由于本题是数论题,所以我只把题目大意说一下...) 输入时给定\(a_0,a_1,b_0,b_1\),题目要求你求出满足如下条件的\(x\)的个数: \[\begin{cases}\gcd ...