导弹发射

时间限制:1000 ms  |  内存限制:65535 KB
难度:4
描述

Alpha 机构研发出一种新型智能导弹,它能够在雷达检测到的区域内,选择一条前进的路径, 击破路径上所有的目标物。 雷达位于(0,0)处,它能够检测到两条射线之间的区域(不妨设在第一象限)。 导弹一开始置放在(0,0)处,它可以在雷达能检测到的区域内先选择一个目标物击破,然后 再继续前进,选择另一个目标物击破。注意,导弹不能沿着这两条射线前进,当然也不能停在原 地。 可以假设,导弹一旦发射,其能量无比大,前进的路径无限长。 已知雷达能够检测到区域,其射线 1:ax-by=0 和射线 2:cx-dy=0。Alpha 机构的总指挥希望 在发现目标群的第一时刻,计算出一条可以击破最多目标物的路径。

输入
第一行: T 表示以下有 T 组测试数据(1≤T ≤8)
对每组测试数据:
第 1 行: n 表示目标物的个数
第 2 行: a b c d 代表两条射线的斜率分别是 a/b 和 c/d。
接下来有 n 行,每行 2 个正整数 xi yi 即第 i 个目标物的坐标。
【约束条件】
(1) n<=10^5 0<=a, b, c, d<=10^5 a 和 b 不会同时为 0,c 和 d 不会同时为 0;
(2) 0<= xi , yi <=10^6 i=1,…..,n
输出
每组测试数据,输出占一行,即导弹能击破的最多目标数。
样例输入
1
15
1 3 2 1
3 1
6 2
4 2
2 5
4 5
6 6
3 4
1 6
2 1
7 4
9 3
5 3
1 3
15 5
12 4
样例输出
4
来源
河南省第九届省赛

解题思路:

给定两个斜率,以这两条直线重新构造一个坐标轴,将符合条件的点存到一个结构体数组,将x从小到大排序,如果x相等将y从小到大排序。接下来就是最基础的LIS。注意如果LIS不用二分会超时。

代码如下:

#include <bits/stdc++.h>
#define N 100005
using namespace std;
struct node
{double x,y;
} no[N];
bool sort_cmp(node a,node b)//按照x坐标从小打到,如果x相等则按照y坐标从小到大
{if(a.x==b.x)return a.y<b.y;return a.x<b.x;
}
int Search(node b[],node num,int low,int high)//二分查找
{int mid;while(low<=high){mid=(low+high)/2;if(num.y>b[mid].y)low=mid+1;elsehigh=mid-1;}return low;
}
int lis(node a[],int n)
{int k=1;node vis[N];vis[0]=a[0];for(int i=1; i<n; i++){if(a[i].y>vis[k-1].y&&a[i].x>vis[k-1].x){vis[k++]=a[i];}else{int mid=Search(vis,a[i],0,k);vis[mid]=a[i];}}return k;
}
int main()
{int T;cin>>T;while(T--){double k1,k2;int l[N];int a,b,c,d,n,p=0;scanf("%d",&n);scanf("%d %d %d %d",&a,&b,&c,&d);k1=a*1.0/b;k2=c*1.0/d;if(k1>k2)swap(k1,k2);for(int i=0; i<n; i++){double ans;scanf("%d%d",&a,&b);ans=b*1.0/a;if(ans>k1&&ans<k2)//当其坐标符合要求,将其两条射线当做坐标轴处理{no[p].x=a*1.0-b*1.0/k2;no[p].y=b*1.0-k1*a;l[p]=1;p++;}}sort(no,no+p,sort_cmp);cout<<lis(no,p)<<endl;}return 0;
}

如果LIS不太了解可以点下面的

传送门

NYOJ_1275 导弹发射 【LIS】相关推荐

  1. 河南省赛 导弹发射 lis

    导弹发射 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 Alpha 机构研发出一种新型智能导弹,它能够在雷达检测到的区域内,选择一条前进的路径, 击破路径上所有的目标物 ...

  2. nyoj 1275 导弹发射(河南省2016年省赛)

    导弹发射 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 Alpha 机构研发出一种新型智能导弹,它能够在雷达检测到的区域内,选择一条前进的路径,击破路径上所有的目标物. ...

  3. 第九届河南省ACM省赛 D 导弹发射

    D 导弹发射 Description Alpha 机构研发出一种新型智能导弹,它能够在雷达检测到的区域内,选择一条前进的路径, 击破路径上所有的目标物. 雷达位于(0,0)处,它能够检测到两条射线之间 ...

  4. UVa 10051 Tower of Cubes(类似LIS)

    题意: 一些重量递增而且各个面都有颜色的立方体,要将这些立方体堆成一个塔,要求两个接触面同色,而且下面的立方体更重.求塔的最大高度. 思路: 用求LIS的思想,无非是多了几个状态.dp[i][j]表示 ...

  5. 1045 Favorite Color Stripe(LIS解法)

    解题思路 本题属于Longest Increasing Sequence最长不下降子序列,但是要注意,LIS当中不会有无效的元素,而本题是有的,所以先要把无效元素过滤掉,才能转化成为LIS问题. 这里 ...

  6. LIS ZOJ - 4028

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4028 memset超时 这题竟然是一个差分约束 好吧呢 对于每一个a[i] ...

  7. 【hdu】4521 小明序列【LIS变种】【间隔至少为d】

    题目链接:https://vjudge.net/contest/228455#problem/B 转载于:https://blog.csdn.net/a709743744/article/detail ...

  8. HDU 1257 - 最少拦截系统 ( LIS / 贪心 )

    题目 现在有一种拦截系统,第一发拦截可以是任意高度,但是之后的拦截高度不能比上次高.为了拦截下所有的炮弹,最少需要准备几套拦截系统? 思路 可能是语文没学好吧,一开始被题意卡了一下.(而且题目连数据范 ...

  9. 选点(dfs序+LIS)

    题意: 有一棵n个节点的二叉树,1为根节点,每个节点有一个值wi.现在要选出尽量多的点. 对于任意一棵子树,都要满足: 如果选了根节点的话,在这棵子树内选的其他的点都要比根节点的值大: 如果在左子树选 ...

最新文章

  1. mybatis基础,mybatis配置文件核心组件typeHandler元素
  2. Roguelike游戏的视野算法
  3. SpringCloud Zuul(十)之配置路由prefix坑
  4. 软件工程学习笔记《四》需求分析
  5. 2021/12/5 XSS跨站原理及攻击手法
  6. Imagination利用精简操作集计算(ROSC)技术实现灵活、高性能的神经网络推理
  7. 在Vue项目中使用LayUI教程且解决laydate无效的问题
  8. Windows To Go常见问题
  9. HP11(HP其他喷头也可) 喷头程序开发项目外包
  10. [元带你学NVMe协议] ] 插槽接口(M.2 / mSATA / SATA )、总线(PCIE / SATA )、传输协议(NVME / AHCI) 图解
  11. JavaFx+Mysql 实现学籍管理系统
  12. python中对象的特性_python面对对象-三大特性
  13. java 公交管理系统 代码_java公交线路管理系统
  14. 13.1-自己开发一个“单片机烧写工具”!不是开玩笑吧?原来如此^~^(OTA升级)
  15. MATLAB 画图相关函数
  16. 重磅!元宇宙招聘会来袭,60多所高校学生参加...
  17. MAC OS X 系统镜像各版本下载
  18. HTML 音频/视频参考手册
  19. 不坑盒子 + 智能写作(Office、WPS插件)助你高效办公,早点下班回家。
  20. VulKan视频编解码: NVIDIA

热门文章

  1. 基于业务描述语言BDL的需求方法论
  2. 支持Genero BDL 4gl语言的编辑器
  3. 计算机内存大小rom,rom容量(ram容量和rom容量谁大)
  4. ACM-ICPC 知识点 经验
  5. 10个提升PPT幻灯片制作效率的方法
  6. android 出生日期设置,android-选择出生日期对话框
  7. php中怎么设计出生日期,php – 将出生日期添加到数据库
  8. 查看Mac本机路由器IP地址
  9. [PS业务知识]BCWS、BCWP、ACWP的理解
  10. 致远OA合并处理策略