2020.10.17 JZOJ 提高B组T2 导弹拦截
2020.10.17 JZOJ 提高B组T2 导弹拦截
题目
Description
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。
敌国的导弹形成了立体打击,每个导弹可以抽象成一个三维空间中的点(x; y; z)。拦截系统发射的炮弹也很好地应对了这种情况,每一发炮弹也可以视为一个三维空间中的点。
但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达三维空间中任意的点,但是以后每一发炮弹到达点的坐标(x; y; z) 的三个坐标值都必须大于前一发炮弹的对应坐标值。
某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。
输入导弹飞来的坐标,计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。注意: 所有导弹都是同时飞来的。
Input
第一行一个正整数n,表示敌国导弹数目。
接下来n 行,每行三个非负整数xi,yi,zi,表示一个敌国导弹的三维坐标。
数据保证所有的导弹坐标互不相同。
Output
第一行一个整数,表示一套系统最多拦截的导弹数。
第二行一个整数,表示拦截所有导弹最少配备的系统数。
Sample Input
4
0 0 0
1 1 0
1 1 1
2 2 2
Sample Output
3
2
Data Constraint
对于30% 的数据,n <=10
对于100% 的数据,n <= 1000,x; y; z <= 10^6
题解
题意
就是那道大家都很熟悉的导弹拦截的升级版
每个导弹是三维中的一个点,导弹同时发射,拦截系统除第一发外,其余的都要满足比前一发的坐标值大,问最大拦截个数和还需多少系统
题解
第一问直接DP,按\(x\)排序,比较\(y,z\),\(f[i]=max(f[j]+1)\)
第二问想贪心,但不行
发现如果可以从\(j\)转移到\(i\),就连一条\(j\)到\(i\)的边
然后把一个点拆成两个点,就形成了一个二分图
思考发现答案就是总点数-最大匹配,匈牙利算法
至于二分图最大匹配不熟的,这里有道板子题:UOJ #78 二分图最大匹配
Code
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct node
{
int x,y,z;
}a[1001];
int n,ans,num,f[1001],fa[2001],map[2002][2002];
bool b[2001];
int read()
{
int res=0;char ch=getchar();
while (ch<'0'||ch>'9') ch=getchar();
while (ch>='0'&&ch<='9') res=(res<<1)+(res<<3)+(ch-'0'),ch=getchar();
return res;
}
bool cmp(node x,node y) {return x.x<y.x;}
bool judge(int x)
{
for (int i=1;i<=map[x][0];++i)
{
if (!b[map[x][i]])
{
b[map[x][i]]=true;
if (!fa[map[x][i]]||judge(fa[map[x][i]]))
{
fa[map[x][i]]=x;
return true;
}
}
}
return false;
}
int main()
{
freopen("missile.in","r",stdin);
freopen("missile.out","w",stdout);
n=read();
for (int i=1;i<=n;++i)
a[i].x=read(),a[i].y=read(),a[i].z=read();
sort(a+1,a+n+1,cmp);
for (int i=1;i<=n;++i)
{
f[i]=1;
for (int j=1;j<i;++j)
if (a[i].y>a[j].y&&a[i].z>a[j].z)
{
f[i]=max(f[i],f[j]+1);
map[j<<1][++map[j<<1][0]]=i<<1|1;
}
}
for (int i=1;i<=n;++i)
ans=max(ans,f[i]);
printf("%d\n",ans);
for (int i=2;i<=n<<1;i+=2)
{
memset(b,false,sizeof(b));
if (judge(i)) ++num;
}
printf("%d\n",n-num);
fclose(stdin);
fclose(stdout);
return 0;
}
2020.10.17 JZOJ 提高B组T2 导弹拦截的更多相关文章
- 【2014广州市选day1】JZOJ2020年9月12日提高B组T2 导弹拦截
[2014广州市选day1]JZOJ2020年9月12日提高B组T2 导弹拦截 题目 Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统 V1.0.但是这种导弹拦截系统有一个缺 ...
- 【Usaco 2009 Gold 】JZOJ2020年9月19日提高B组T2 电视游戏问题
[Usaco 2009 Gold ]JZOJ2020年9月19日提高B组T2 电视游戏问题 题目 Description 农夫约翰的奶牛们游戏成瘾!本来FJ是想要按照陶叫兽的做法拿她们去电击戒瘾的,可 ...
- 2020.10.17【普及组】模拟赛C组 总结
总结 这次比赛 120 分,老师说上 200 是不容易的,但我觉得这不是我真的水平 改题情况 T1 题目大意:有 N 个小朋友,每个小朋友有 \(B_i\) 个朋友,问从中随机选 3 人使得 3 人关 ...
- 2018.10.17校内模拟赛:T2神光
题面:pdf 首先排序,二分,然后怎么判定是否可行. 最简单的思路是,dp[i][j][k],到第i个,用了j次红光,k次绿光,前i个点都选上了,是否可行.然后转移就行. 然后考试的时候就想到这了,往 ...
- noip提高组1999 导弹拦截
导弹拦截 背景 实中编程者联盟为了培养技术精湛的后备人才,必须从基础题开始训练. 描述 某国为了防御敌国的导弹袭击,研发出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任 ...
- JZOJ 2020.10.7 提高B组反思
JZOJ 2020.10.7 提高B组反思 T1 比较简单的一道题 跑\(k\)遍\(SPFA\) 然后全排列顺序枚举求解 TLE 60 双向存边数组没开两倍-- T2 搞出分母 分子不会求 \(n^ ...
- JZOJ 2020.10.6 提高B组反思
JZOJ 2020.10.6 提高B组反思 T1 NYG的动态数点 最简单的一题 很容易想到\(O(n)\)的做法 枚举最小的那个数,即\(a_k\) 然后向左和向右扩展 然后可以直接从右端点+1继续 ...
- JZOJ8月10日提高组T2 Fix
JZOJ8月10日提高组T2 Fix 题目 Description There are a few points on a plane, and some are fixed on the plane ...
- JZOJ 11.14 提高B组反思
JZOJ 11.14 提高B组反思 T1 题目虽然有点高大上,但是很容易懂 有一个\(d\)维空间,同时有一个长度为\(2n\)的操作序列,每个操作往某一维的正方向或反方向走一格,问多少种方案使得最后 ...
随机推荐
- 《Clojure编程》笔记 第16章 Clojure与web
目录 背景简述 第16章 Clojure与web 16.1 术语 16.2 Clojure栈 16.3 基石:Ring 16.3.1 请求与应答 16.3.2 适配函数 16.3.3 处理函数 16. ...
- c# 生成xml的结构 专业代码
详细看代码把 public ArrayList kepingyi(string names="") { ArrayList list = new ArrayList(); stri ...
- 思科ASA放行主/被动FTP
实验环境: 设备说明: internet是一台windows10,用于模拟外网客户 ASA是思科ASA防火墙 FTP-SERVER是Centos7,Centos7上安装了vsftpd 实验说明: 本文 ...
- TCP拥塞控制原理
一.何为拥塞 路由器无法处理高速到达的数据而被迫丢弃数据的现象叫做拥塞. 二.何为拥塞控制 TCP流量控制时为了平衡一个链接中接收方和发送方的速度匹配问题,当发送方发现发送速度大于接收方的接收速度时动 ...
- 是什么让我节省了60%的编码时间?使用MBG
MyBatis Generator简介 业务需求不断变更,数据库表结构不断修改,是我们逃不出的宿命.工欲善其事,必先利其器,是时候祭出神器了:MyBatis Generator(简称:MBG),它是一 ...
- [MIT6.006] 5. Binary Search Trees, BST Sort 二分搜索树,BST排序
第5节课主要讲述了二分搜索树概念和BST排序.讲师提出一个关于"跑道预订系统"的问题,假设飞机场只有一个跑道,飞机需要为未来降落时间t进行预订,如果时间集合R中,在t时间前后k分钟 ...
- http代理阅读2
向上游服务器发送请求处理 static void ngx_http_upstream_send_request(ngx_http_request_t *r, ngx_http_upstream_t * ...
- Linux下PSSH的安装
python实现的集群批量命令工具,非常方便集群管理.同时其还带有pscp等功能 在合适的目录下,这里本机为/soft 输入命令 wget https://pypi.python.org/packag ...
- webpack 无法打包:No configuration file found and no output filename configured via CLI option
报错内容 No configuration file found and no output filename configured via CLI option.A configuration fi ...
- js 进度条效果
<!DOCTYPE html><html><head><meta charset="utf-8"><title>< ...