UVALive - 7374 Racing Gems 二维非递减子序列
题目链接:
http://acm.hust.edu.cn/vjudge/problem/356795
Racing Gems
Time Limit: 3000MS
#### 问题描述
> You are playing a racing game. Your character starts at the
> x axis (y = 0) and proceeds up the race track, which has a
> boundary at the line x = 0 and another at x = w. You may
> start the race at any horizontal position you want, as long as
> it is within the track boundary. The finish line is at y = h,
> and the game ends when you reach that line. You proceed at
> a fixed vertical velocity v, but you can control your horizontal
> velocity to be any value between −v/r and v/r, and change it at any time.
> There are n gems at specific points on the race track. Your job is to collect as many gems as
> possible. How many gems can you collect?
输入
The input file contains several test cases, each of them as described below.
The first line of input contains four space-separated integers n, r, w, and h (1 ≤ n ≤ 105
, 1 ≤ r ≤ 10,
1 ≤ w, h ≤ 109
). Each of the following n lines contains two space-separated integers xi and yi
, denoting
the coordinate of the i-th gem (0 ≤ xi ≤ w, 0 < yi ≤ h). There will be at most one gem per location.
The input does not include a value for v.
输出
For each case, print, on a single line, the maximum number of gems that can be collected during the
race.
样例
sample input
5 1 10 10
8 8
5 1
4 6
4 7
7 9
5 1 100 100
27 75
79 77
40 93
62 41
52 45
10 3 30 30
14 9
2 20
3 23
15 19
13 5
17 24
6 16
21 5
14 10
3 6sample output
3
3
4
题意
以辆赛车可以从x轴上任意点出发,他的水平速度允许他向每向上移动1个单位,就能向左或向右移动1/r个单位(也就是它的辐射范围是个等腰三角形)
现在赛车从x轴出发,问它在到达终点前能吃到的最多钻石。
题解
考虑每个钻石的向下辐射范围,并且将其投影到x轴上的两个点,(辐射范围与x轴的两个焦点),然后我们就把题目转化成了一个区间覆盖问题,我们用x<y表示x区间被y区间覆盖,即求二维最长的上升子序列:a1<=a2<=...<=an。
我们按每个钻石的左端点排序,然后跑右端点的最长不下降子序列就可以了。由于数据比较大,用二分处理成nlogn的复杂度。
代码
#include<map>
#include<queue>
#include<vector>
#include<cstdio>
#include<cstring>
#include<string>
#define X first
#define Y second
#include<iostream>
#include<algorithm>
#define mkp make_pair
#define lson (o<<1)
#define rson ((o<<1)|1)
#define M (l+(r-l)/2)
#define bug(a) cout<<#a<<" = "<<a<<endl
using namespace std;
typedef __int64 LL;
const int maxn=1e5+10;
struct Node{
LL a,b;
bool operator <(const Node& tmp) const {
return a>tmp.a||a==tmp.a&&b<tmp.b;
}
}nds[maxn];
int n,w,h;
LL r;
LL ra[maxn];
int dp[maxn];
int main() {
memset(dp,0,sizeof(dp));
scanf("%d%I64d%d%d",&n,&r,&w,&h);
for(int i=1;i<=n;i++){
int x,y;
scanf("%d%d",&x,&y);
//映射到x轴的左端点
nds[i].a=r*x-y;
//映射到x轴的右端点
nds[i].b=r*x+y;
}
//按左端点降序排,左端点相同时右端点升序排
sort(nds+1,nds+n+1);
//初始的ra数组为空
int tot=1,ans=1;
for(int i=1;i<=n;i++){
//二分查找
int pos=upper_bound(ra+1,ra+tot,nds[i].b)-ra;
dp[i]=pos;
ra[pos]=nds[i].b;
if(tot==pos) tot++;
ans=max(ans,dp[i]);
}
printf("%d\n",ans);
return 0;
}
UVALive - 7374 Racing Gems 二维非递减子序列的更多相关文章
- UVaLive 7374 Racing Gems (DP,LIS)
题意:以辆赛车可以从x轴上任意点出发,他的水平速度允许他向每向上移动v个单位,就能向左或向右移动v/r个单位(也就是它的辐射范围是个等腰三角形) 现在赛车从x轴出发,问它在到达终点前能吃到的最多钻石. ...
- HDU 5532 Almost Sorted Array (最长非递减子序列)
题目链接 Problem Description We are all familiar with sorting algorithms: quick sort, merge sort, heap s ...
- HDU 6357.Hills And Valleys-字符串非严格递增子序列(LIS最长非下降子序列)+动态规划(区间翻转l,r找最长非递减子序列),好题哇 (2018 Multi-University Training Contest 5 1008)
6357. Hills And Valleys 自己感觉这是个好题,应该是经典题目,所以半路选手补了这道字符串的动态规划题目. 题意就是给你一个串,翻转任意区间一次,求最长的非下降子序列. 一看题面写 ...
- Codeforces Round #323 (Div. 2) D. Once Again... 暴力+最长非递减子序列
D. Once Again... You a ...
- hdu5256序列变换(非递减子序列)
题意(中文直接粘吧)序列变换 Problem Description 我们有一个数列A1,A2...An,你现在要求修改数量最少的元素,使得这个数列严格递增.其中无论是修改前还是修改后,每个元 ...
- Comet OJ - Contest #6 B.双倍快乐(二维最大上升子序列和)
双倍快乐 题目描述 Illyasviel:"你想要最长不下降子序列吗?" star-dust:"好啊!" Illyasviel:"老板,给我整两个最长 ...
- HDU 6357.Hills And Valleys-动态规划(区间翻转l,r找最长非递减子序列)
题意:给一串由n个数字组成的字符串,选择其中一个区间进行翻转,要求翻转后该字符串的最长非降子序列长度最长,输出这个最长非降子序列的长度以及翻转的区间的左右端点 #include<bits/std ...
- HDU 1025 Constructing Roads In JGShining's Kingdom[动态规划/nlogn求最长非递减子序列]
Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65 ...
- 【坐标变换】【二维偏序】【线段树】Gym - 100820G - Racing Gems
题意:第一象限有n个点,你从x正半轴任选一个位置出发,vy恒定,vx可以任意变化,不过只能在-vy/r到vy/r之间变化,问你最多能经过多少个点. 暴力dp是n^2,不可取. 注意到,一个点,所能到达 ...
随机推荐
- CSS: word-wrap和word-break
最近修改页面排版的一些问题,发现关于内容分词换行有两个主要的CSS: word-wrap 和 word-break 特别是word-wrap还有个取值break-word,更使得这两个属性容易混淆. ...
- tomcat目录简介
http://www.cnblogs.com/kerrycode/p/3588816.html 主目录下面有bin.lib等目录 bin 存放Tomcat启动.停止服务程序以及一些其他脚本程序 lib ...
- HBase从hdfs导入数据
需求:将HDFS上的文件中的数据导入到hbase中 实现上面的需求也有两种办法,一种是自定义mr,一种是使用hbase提供好的import工具 一.hdfs中的数据是这样的 每一行的数据是这样的id ...
- 如何批量转换 WordPress 文章分类
可能建博之初,分类设置过于详细,后来想重新整理并删除一些分类项目,比如删除分类A,并将其中的所有文章划归到分类B中,手动修改文章的分类过于麻烦,有木有什么方法可以批量移动文章到另一个分类中呢? 网上闲 ...
- 神奇的fastcgi_finish_request
当PHP运行在FastCGI模式时,PHP FPM提供了一个名为fastcgi_finish_request的方法.按照文档上的说法,此方法可以提高请求的处理速度,如果有些处理可以在页面生成完后再进行 ...
- JSON (仅限本地)
<script type="text/javascript"> setInterval(function() { $("#content").loa ...
- jQuery基础知识--选择器与效果
$(this).hide()-----隐藏当前元素 $("p").hide()------隐藏所有段落 $(".test").hide()--隐藏所有class ...
- UltraEdit中使用正则表达式
正则表达式 (UltraEdit Syntax): % 匹配行首 - 表明要搜索的字符串一定在行首. $ 匹配行尾 - 表明要搜索的字符串一定在行尾 ? 匹配除换行符外的任一单个字符. * 匹配任意个 ...
- yhd日志分析(二)
yhd日志分析(二) 继续yhd日志分析,统计数据 日期 uv pv 登录人数 游客人数 平均访问时长 二跳率 独立ip数 1 分析 登录人数 count(distinct endUserId) 游客 ...
- [terry笔记]RMAN综合学习之配置
[terry笔记]RMAN综合学习之备份http://www.cnblogs.com/kkterry/p/3308405.html [terry笔记]RMAN综合学习之恢复 http://www.cn ...