【NOIP2016提高组】愤怒的小鸟

article/2025/9/27 18:09:21

题目背景

NOIP2016 提高组 Day2 T3

题目描述

Kiana 最近沉迷于一款神奇的游戏无法自拔。简单来说,这款游戏是在一个平面上进行的。

有一架弹弓位于 (0,0) 处,每次 Kiana 可以用它向第一象限发射一只红色的小鸟,小鸟们的飞行轨迹均为形如 y=ax2+bx 的曲线,其中 a,b 是 Kiana 指定的参数,且必须满足 a<0。

当小鸟落回地面(即x轴)时,它就会瞬间消失。

在游戏的某个关卡里,平面的第一象限中有 n 只绿色的小猪,其中第 i 只小猪所在的坐标为 (xi,yi) 。

如果某只小鸟的飞行轨迹经过了(xi,yi),那么第 i 只小猪就会被消灭掉,同时小鸟将会沿着原先的轨迹继续飞行;

如果一只小鸟的飞行轨迹没有经过(xi,yi),那么这只小鸟飞行的全过程就不会对第 i 只小猪产生任何影响。

例如,若两只小猪分别位于 (1,3) 和 (3,3) ,Kiana 可以选择发射一只飞行轨迹为 y=-x2+4x 的小鸟,这样两只小猪就会被这只小鸟一起消灭。

而这个游戏的目的,就是通过发射小鸟消灭所有的小猪。

这款神奇游戏的每个关卡对 Kiana 来说都很难,所以 Kiana 还输入了一些神秘的指令,使得自己能更轻松地完成这个游戏。这些指令将在【输入格式】中详述。

假设这款游戏一共有 T 个关卡,现在 Kiana 想知道,对于每一个关卡,至少需要发射多少只小鸟才能消灭所有的小猪。由于她不会算,所以希望由你告诉她。

输入格式

下面依次输入这 T 个关卡的信息。每个关卡第一行包含两个非负整数 n,m ,分别表示该关卡中的小猪数量和 Kiana 输入的神秘指令类型。接下来的 n 行中,第 i 行包含两个正实数 xi,yi ,表示第 i 只小猪坐标为 (xi,yi)。数据保证同一个关卡中不存在两只坐标完全相同的小猪。

如果 m=0,表示 Kiana 输入了一个没有任何作用的指令。
如果 m=1 ,则这个关卡将会满足:至多用  只小鸟即可消灭所有小猪。
如果 m=2 ,则这个关卡将会满足:一定存在一种最优解,其中有一只小鸟消灭了至少  只小猪。
保证 1≤n≤18,0≤m≤2,0<xi,yi<10,输入中的实数均保留到小数点后两位。
上文中,符号  分别表示对 c 向上取整和向下取整,例如:

    

输出格式

对每个关卡依次输出一行答案。
输出的每一行包含一个正整数,表示相应的关卡中,消灭所有小猪最少需要的小鸟数量。

样例数据 1

输入


2 0 
1.00 3.00 
3.00 3.00 
5 2 
1.00 5.00 
2.00 8.00 
3.00 9.00 
4.00 8.00 
5.00 5.00

输出


1

样例数据 2

输入


2 0 
1.41 2.00 
1.73 3.00 
3 0 
1.11 1.41 
2.34 1.79 
2.98 1.49 
5 0 
2.72 2.72 
2.72 3.14 
3.14 2.72 
3.14 3.14 
5.00 5.00

输出



3

样例数据 3

输入


10 0 
7.16 6.28 
2.02 0.38 
8.33 7.78 
7.68 2.09 
7.46 7.86 
5.77 7.44 
8.24 6.72 
4.42 5.11 
5.42 7.79 
8.15 4.99

输出

6

备注

【样例1说明】
这组数据中一共有两个关卡。

第一个关卡与【问题描述】中的情形相同,2 只小猪分别位于 (1.00,3.00) 和 (3.00,3.00) ,只需发射一只飞行轨迹为 y=-x2+4x 的小鸟即可消灭它们。

第二个关卡中有 5 只小猪,但经过观察我们可以发现它们的坐标都在抛物线 y=-x2+6x 上,故 Kiana 只需要发射一只小鸟即可消灭所有小猪。

【数据规模与约定】
数据的一些特殊规定如下表:

 

解析:

       不说过程分了直接说正解吧。

       首先记忆化搜索优化过后能过。。。但这不是官方正解,所以我还是说官方正解吧。

       考虑状压DP,令f[i]表示状态为i时的最优解,于是有:

       f[i|g[j][k]]=min(f[i|g[j][k]],f[i])

       其中g[j][k]表示i点与j点形成的抛物线经过点的状态,于是就有了以下DP式:

for(int i=0;i<(1<<n);i++)for(int j=0;j<n;j++)for(int k=0;k<n;k++)f[i|g[j][k]]=min(f[i|g[j][k]],f[i]+1);

       这样做的复杂度是O(N^2*2^N),虽然能过但是不够优秀,原因在于额外枚举了很多无用的抛物线,(比如说g[j][k]本就被包含在状态i中),所以我们尝试降低复杂度。

       具体做法就是在状态转移时。可以固定每次都选取未被击中的编号最小的目标,这样每次只需要枚举与该目标相关的抛物线即可。由于这样的抛物线数量不超过n。故经过次优化后复杂度降为O(N*2^N),感觉没降多少实际测试快得多。

       PS:想知道搜索怎么写可以看这篇博客:UOJ265 【NOIP2016】愤怒的小鸟

 

代码:

#include <bits/stdc++.h>
using namespace std;const int Max=20;
int t,n,m;
int f[(1<<18)+10],g[Max][Max];
double x[Max],y[Max];int main()
{scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);for(int i=0;i<n;i++) scanf("%lf%lf",&x[i],&y[i]);memset(f,0x3f3f3f,sizeof(f)),memset(g,0,sizeof(g)); for(int i=0;i<n;i++){for(int j=0;j<n;j++)if(i!=j){double a=(y[i]/x[i]-y[j]/x[j])/(x[i]-x[j]); double b=(x[i]/x[j]*y[j]-x[j]/x[i]*y[i])/(x[i]-x[j]);if(a<=-1e-6)for(int k=0;k<n;k++)if(fabs(a*x[k]*x[k]+b*x[k]-y[k]) <= 1e-6) g[i][j]|=1<<k;}g[i][i]|=1<<i;}f[0]=0;for(int i=0;i<(1<<n);i++)for(int j=0;j<n;j++)if(!((1<<j)&i)){for(int k=j;k<n;k++) if(!((1<<k)&i)) f[i|g[j][k]]=min(f[i|g[j][k]],f[i]+1);break;}cout<<f[(1<<n)-1]<<"\n";}return 0;
}

 


http://chatgpt.dhexx.cn/article/OydOwcaq.shtml

相关文章

P2058 [NOIP2016 普及组] 海港

题目描述 小K是一个海港的海关工作人员&#xff0c;每天都有许多船只到达海港&#xff0c;船上通常有很多来自不同国家的乘客。 小K对这些到达海港的船只非常感兴趣&#xff0c;他按照时间记录下了到达海港的每一艘船只情况&#xff1b;对于第i艘到达的船&#xff0c;他记录了…

NOIP 2016 年普及组初赛试题整理

#include <iostream> using namespace std; int readint() {int num 0; // 存储读取到的整数int negative 0; // 负数标识char c;c cin.get(); // 存储当前读取到的字符while ((c < 0 || c > 9) && c ! -)c ① ;if (c -)negative 1;else② ;c cin.g…

「NOIP2016」玩具谜题

小南有一套可爱的玩具小人&#xff0c;它们各有不同的职业。 有一天&#xff0c;这些玩具小人把小南的眼镜藏了起来。小南发现玩具小人们围成了一个圈&#xff0c;它们有的面朝圈内&#xff0c;有的面朝圈外。如下图&#xff1a; 这时singer告诉小南一个谜题&#xff1a;“眼镜…

【NOIP2016提高组】蚯蚓

蚯蚓 题目背景 NOIP2016 提高组 Day2 T2 题目描述 本题中&#xff0c;我们将用符号 表示对 c 向下取整&#xff0c;例如&#xff1a; 蛐蛐国最近蚯蚓成灾了&#xff01;隔壁跳蚤国的跳蚤也拿蚯蚓们没办法&#xff0c;蛐蛐国王只好去请神刀手来帮他们消灭蚯蚓。 蛐蛐国里…

NOIP2016提高组 day1

1.玩具谜题 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业。 有一天, 这些玩具小人把小南的眼镜藏了起来。 小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外。如下图: 这时 s i n g e r singer singer告诉小南一个谜題: “眼镜藏在我左数第3个玩具…

[NOIP2016 普及组] 魔法阵

[NOIP2016 普及组] 魔法阵 - 洛谷 题意分析 给定一个四元组&#xff0c;四个数分别为a,b,c,d&#xff0c;满足以下条件&#xff1a; 1.a<b<c<d 2.b-a2*(d-c) 3.b-a(c-b)/3 //注意是实除 现在给你一个序列X&#xff0c;请你求出序列X中每个数分别作为a,b,c,d的个数。…

NOIP 2016 普及组

文章目录 T1 买铅笔T1分析 T2 回文日期T2分析 T3 海港T3分析 T4 魔法阵T4分析 T1 买铅笔 题目点击→计蒜客 [NOIP2016]买铅笔 题目描述 P 老师需要去商店买 n n n 支铅笔作为小朋友们参加 NOIP 的礼物。她发现商店一共有 3 3 3 种包装的铅笔&#xff0c;不同包装内的铅笔数…

题解 【NOIP2016】魔法阵

【NOIP2016】魔法阵 Description 六十年一次的魔法战争就要开始了,大魔法师准备从附近的魔法场中汲取魔法量。 大魔法师有m个魔法物品,编号分别为1,2,...,m。每个物品具有一个魔法值,我们用xi表示编号为i的物品的魔法值。每个魔法值xi是不超过n的正整数,可能有多个物品的魔…

NOIP2016总结

Day1&#xff1a; T1&#xff1a;模拟&#xff1b; 1 #include<iostream>2 #include<cstdio>3 #include<cstdlib>4 #include<cstring>5 #include<string>6 #include<ctime>7 #include<cmath>8 #include<set>9 #include<map…

2016noip-问题求解超级详细解

noip2016普及组问题求解 从一个44的棋盘&#xff08;不可旋转&#xff09;中选取不在同一行也不在同一列上的两个方格&#xff0c;共有&#xff08; &#xff09;种方法。 解题&#xff1a;首先是如下棋盘 于是我们发现这是组合问题&#xff0c;也就是从16个格子中选择两个格子…

MIPI D-PHY C-PHY

MIPI可分为物理层和逻辑层两大部分。物理层尽可能采用通用内容&#xff0c;逻辑层则是分别面向摄像头、显示屏、移动通信、存储等不同用途的专用协议。MIPI的物理层有D-PHY、M-PHY、C-PHY等3种。D-PHY现在大量应用于应用处理器与显示屏、摄像头连接的部分。随着摄像头、显示屏的…

以太网phy学习

关键词 10BASE2:采用细同轴电缆接口的IEEE 802.3 10Mb/s物理层规格(参见IEEE 802.3 Clause 10.) 10BASE5:采用粗同轴电缆接口的IEEE 802.3 10Mb/s物理层规格(参见IEEE 802.3 Clause 8.) 10BASE-F:采用光纤电缆接口的IEEE 802.3 10Mb/s物理层规格(参见IEEE 802.3 Clause 15.) 1…

M-PHY协议解读一:M-PHY整体概述

1.1 M-PHY整体概述 M-PHY协议思维导图如下&#xff1a; 思维导图主要分为两大部分&#xff1a;M-PHY基本特点和基本概念。第一部分对M-PHY的基本特点进行描述&#xff0c;通过与D-PHY/C-PHY多个维度的对比分析&#xff0c;对M-PHY有一个整体的基本认识&#xff1b;第二部分对M…

以太网PHY 开发与解析

目录 1.PHY芯片介绍 1.1 芯片引脚定义和说明 1.2 PHY芯片功能说明 1.3 供电管理 1.4 寄存器说明 1.4.1 控制寄存器 1.4.2 状态寄存器 1.4.3 PHY ID寄存器 1.4.4 自协商广播寄存器 1.4.5 自动协商链接合作伙伴能力寄存器 1.4.6 自动协商扩展寄存器 1.4.7 AVICOM指定…

PHY MAC

常用网卡芯片 DM9000 MAC(数据链路层)PHY(物理层) CS8900 PHY LAN91C111 MACPHY PHY 百科名片 PHY指物理层&#xff0c;OSI的最底层。 一般指与外部信号接口的芯片。 以太网PHY芯片 。小小的不起眼但又无处不在的网卡。如果在5年前&#xff0…

MIPI C-PHY 与 D-PHY

MIPI&#xff1a;即移动产业处理器接口&#xff08;Mobile Industry Processor Interface 简称MIPI&#xff09;联盟&#xff1b;是MIPI联盟发起的为移动应用处理器制定的开放标准和一个规范。 CSI&#xff1a;MIPI-CSI-2协议是MIPI联盟协议的子协议&#xff0c;专门针对摄像头…

MIPI系列之“C-PHY”

本篇主要介绍物理层WG中的C-PHY。C-PHY基于3-Phase symbol编码技术&#xff0c;通过three-wire trios传输2.28 bits/symbol&#xff0c;其目标速率是2.5Gsymbols/s。C-PHY与D-PHY有许多共同点&#xff0c;C-PHY的绝大部分特性都是从D-PHY改编而来的。C-PHY被设计成能够与D-PHY在…

ethernet phy

phy处于physical层&#xff0c;上一层是data link层&#xff1a;MAC&#xff0c;两者通过xMII和MDIO接口通信。 xMII XMII包含MII(802.3 sec22&#xff0c;适用于10M和100M传输)&#xff0c;GMII(802.3 sec35.2.2&#xff0c;适用于1000M传输)&#xff0c;RGMII(GMII的简化版)…

USB的PHY

Linux USB 3.0驱动分析&#xff08;六&#xff09;——USB主机控制器HCD分析 网卡芯片,也有 controller(mac芯片) 和 PHY部分 USB 芯片,也有 controller 和 PHY部分 5G 芯片,也有 协议层 和 PHY部分USB主机控制器和USB PHY是如何完成收发数据的 USB 全套硬件组成ControllerC…

PHY芯片

以太网媒体接入控制器(MAC) 物理接口收发器(PHY) 以太网接口可分为协议层和物理层。 协议层是由一个叫MAC(Media Access Layer&#xff0c;媒体访问层)控制器的单一模块实现。 物理层由两部分组成&#xff0c;即PHY(Physical Layer&#xff0c;物理层)和传输器。 常见的网卡芯片…