Kiana最近沉迷于一款神奇的游戏无法自拔。

简单来说,这款游戏是在一个平面上进行的。

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

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

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

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

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

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

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

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

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

第一行包含一个正整数T,表示游戏的关卡总数。

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

如果m=0,表示Kiana输入了一个没有任何作用的指令。

首先m没用

然后这题数据那么小,显然状压

状压无非就是处理打掉和没打掉

那么我们可以预处理每两个小鸟的轨迹,ab可以数学推导出来,然后计算这个轨迹经过了哪一些点,计算出来之后把经过点的状态压出来,我认为有必要贴出来2的幂次方

2^1=2
2^2=4
2^3=8
2^4=16
2^5=32
2^6=64
2^7=128
2^8=256
2^9=512
2^10=1024
2^11=2048
2^12=4096
2^13=8192
2^14=16384
2^15=32768
2^16=65536
2^17=131072
2^18=262144
2^19=524288
2^20=1048576
2^21=2097152
2^22=4194304
2^23=8388608
2^24=16777216
2^25=33554432
2^26=67108864
2^27=134217728
2^28=268435456
2^29=536870912
2^30=1073741824
2^31=2147483648
2^32=4294967296

然后就暴力枚举全集就完了

重点!!!精度问题,注意在比较相等的时候精度一定要开的足够小!!!!我就是这么被卡了!!!!请开1e-6

同时还有一个问题,如果有些点只能原点到那里没有其他任何点经过(就是这个点与其他点组合成的二次函数系数一定是正数),最后直接一个个单独处理就行了,非常简单

记住特判n=1

代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 double x[20],y[20],a,b;
 6 int now,s[262150];
 7 double abs(double x){
 8     if(x<0)return -x;
 9     return x;
10 }
11 int main() {
12     int T;
13     cin>>T;
14     while(T--) {
15         memset(s,0x3f3f3f3f,sizeof(s));
16         int n,m;
17         cin>>n>>m;
18         int tot=(1<<n)-1;
19         for(int i=1; i<=n; i++) {
20             cin>>x[i]>>y[i];
21         }
22         if(n==1){
23             cout<<1<<endl;
24             continue;
25         }
26         s[0]=0;
27         for(int i=1; i<n; i++) {
28             for(int j=i+1; j<=n; j++) {//进行两两枚举
29                 if(x[i]==x[j])continue;
30                 now=0;
31                 b=(y[j]*x[i]*x[i]-x[j]*x[j]*y[i])*1.0/(x[i]*x[i]*x[j]-x[i]*x[j]*x[j]);
32                 a=(y[i]-b*x[i])*1.0/(x[i]*x[i]*1.0);
33                 if(a>=0.0)continue;
34                 for(int k=1; k<=n; k++) {
35                     if(abs((a*x[k]*x[k]+b*x[k])*1.0-y[k]*1.0)<=0.000001) {
36                         now+=1<<(k-1);
37                     }
38                 }
39                 for(int k=0; k<=tot; k++) {
40                     s[k|now]=min(s[k|now],s[k]+1);
41                 }
42             }
43         }
44         for(int i=1;i<=n;i++){
45             int now=1<<(i-1);
46             for(int j=0;j<=tot;j++){
47                 s[j|now]=min(s[j|now],s[j]+1);
48             }
49         }
50         cout<<s[tot]<<endl;
51     }
52 }

转载于:https://www.cnblogs.com/saionjisekai/p/9535800.html

NOIP2016 D2T3 愤怒的小鸟相关推荐

  1. 【NOIP2016】愤怒的小鸟

    Description Kiana最近沉迷于一款神奇的游戏无法自拔.  简单来说,这款游戏是在一个平面上进行的.  有一架弹弓位于(0,0)处,每次Kiana可以用它向第一象限发射一只红色的小鸟,小鸟 ...

  2. linux 6.4定时启动,Centos6.4 设置开机自动以某个非root用户启动脚本

    搭建LAMP环境注意事项 一:安装mysql 5.5以上版本需要使用cmake 和 bison 并且需要安装ncurses 在安装MySQL完毕之后,需要覆盖 掉 /etc/my.cnf centos ...

  3. [NOIP2016]愤怒的小鸟(状压DP)

    [NOIP2016]愤怒的小鸟(状压DP) 题目描述 输入输出格式 输入格式: 第一行包含一个正整数 T,表示游戏的关卡总数. 下面依次输入这 T个关卡的信息.每个关卡第一行包含两个非负整数 n,m, ...

  4. [NOIP2016 提高组] 愤怒的小鸟

    [NOIP2016 提高组] 愤怒的小鸟 题意: 有n只猪,给出猪的坐标(xi,yi),问最少用几个形如 y=ax^2+bx 的曲线可以保证所有猪在曲线上,满足a<0,a,b为实数 n<= ...

  5. NOIP2016 愤怒的小鸟

    传送门 非常有趣的状压DP.(对反正我自己又没想出来) 因为猪的数目非常的少,还是能想到状压DP.之后,因为首先小鸟都是从原点发射的,所以我们只需要两只猪就可以确定一条抛物线. 既然如此,我们就可以枚 ...

  6. P2831 [NOIP2016 提高组] 愤怒的小鸟 状压dp

    某谷链接 题意:选最少的抛物线来覆盖所有点. 注意到a<0,所以我们可以枚举两个点来构成一条抛物线,让后记这两个点构成的抛物线为 cov[i][j]cov[i][j]cov[i][j],让后他存 ...

  7. [NOIP2016]愤怒的小鸟 状态压缩dp

    题目描述 Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可以用它向第一象限发射一只红色的小鸟,小鸟们的飞行轨迹均为形 ...

  8. NOIP2016 DAY2 T3 愤怒的小鸟

    传送门 题目描述 Kiana 最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于 (0,0)(0,0) 处,每次 Kiana 可以用它向第一象限发射一只红色的 ...

  9. 2018.11.01【NOIP2016】【洛谷P2831】愤怒的小鸟(状压DP)

    传送门 解析: 数据范围181818,多么显然的状压... 但是!!!为什么O(n22n)O(n^22^n)O(n22n)能过???复杂度明显不对啊... 这里提供一种O(n2n)O(n2^n)O(n ...

最新文章

  1. 关于一个tomcat里面放2个项目启动报listener错误
  2. hbase把表删除后又新建该表提示表已存在,解决方案
  3. 电子信息工程跨考计算机武大,往届从材料跨考武大085208电子与通信工程初试303分 - 考研 - 小木虫 - 学术 科研 互动社区...
  4. iphone 随机颜色生成
  5. Source InSight context 窗口丢失的解决办法
  6. java ftp 上传文件 无效_java实现FTP文件上传出现的问题
  7. c语言输出3位数逆序数,C语言求助!一个三位数的逆序数,总是编不对
  8. 三层交换机转发原理和实验
  9. vs2008+sqlserver2008 同一台服务器webconfig 数据连接串的配置要点
  10. redis缓存命中率计算
  11. golang中base64编码_Golang实现的Base64加密
  12. 六子棋人机程序Java版(附源码+设计思路)
  13. 【HDU2825】AC自动机+状压DP
  14. lg相乘公式_lg函数(log的公式大全)
  15. 六爻:占卜记录(By eof)
  16. 安装 Ubuntu 22.04.1 LTS 桌面版(详细步骤)
  17. wps 字体对系统无效_linux版WPS系统缺失字体的解决办法
  18. 计算机拼歌曲,粤语歌曲填词法 (电脑软件 lyricsAID)
  19. 俄罗斯方块游戏的消行实现
  20. 最好的体育测试软件,体育锻炼标准测试app

热门文章

  1. 小程序提交表单mysql_GitHub - kun19911227/minipro: 微信小程序提交带图片的表单
  2. python对话机器人框架_长篇文讲解:使用Python AIML搭建聊天机器人的方法示例(收藏)...
  3. lcl手术和飞秒区别_干货科普:目前市面上4种近视手术方式有何区别(全飞秒、半飞秒、全激光、晶体植入)...
  4. 发布订阅模式 仿写Vue事件监听手写js实现
  5. typescript赋值
  6. Could not install from “echarts\lib\visual\dataColor“ as it does not contain a package.json file.
  7. 编译OpenCV遇到Qmake问题
  8. java开发程序员_Java大牛给入门Java开发程序员的10个学习建议
  9. 利用Linux系统生成随机密码的10种方法
  10. 第一次正经面试之发现自己的缺陷和不足