【NOIP2016提高组】 Day2 T3 愤怒的小鸟
题目传送门:https://www.luogu.org/problemnew/show/P2831
说个题外话:NOIP2014也有一道题叫做愤怒的小鸟。
这题自测时算错了eps,导致被卡了精度,从100卡剩80
由于此题n的范围特别小,所以考虑使用状压dp。
我们用一个整数i来描述状态,i的第k个bit表示第k只鸟是否被消灭,f[i]表示在这一状态下所需鸟的最小数量。
由于不在同一直线上的三个点确定一条抛物线,所以我们可以预处理出所有的可行抛物线,并确定在该抛物线上的鸟的编号(这一步对精度要求极高)。同时考虑到两只鸟与原点存在三点共线的情况,故在抛物线方案中写入单独消灭指定一只小鸟的情况。故消灭方案之多有(n*(n-1)/2+n)种。
然后就愉快地进行转移啦~ 顺便吐槽下m没有卵用
时间复杂度为O(n^2*2^n)。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#define M 18
#define eps (1e-10)
using namespace std;
int f[<<M]={};
int n;
struct pt{
int x,y; pt(){x=y=;}
pt(double xx,double yy){x=xx; y=yy;}
}a[M];
struct pao{
double a,b; pao(){a=b=;}
pao(pt A,pt B){
double x0=A.x,x1=B.x,y0=A.y,y1=B.y;
a=(y1-y0*x1/x0)/(x1*x1-x0*x1);
b=y0/x0-a*x0;
}
bool check(){
if(a>-eps) return ;
return ;
}
double get(double x){
double ans=a*x*x+b*x;
return ans;
}
};
int fly[M*M]={},use=;
bool b[<<M]={};
int Main(){
memset(f,,sizeof(f));
memset(a,,sizeof(a));
memset(fly,,sizeof(fly));
memset(b,,sizeof(b));
use=; int m;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
double x,y; scanf("%lf%lf",&x,&y);
x=x*+0.3; y=y*+0.3;
a[i]=pt(x,y);
}
for(int i=;i<n;i++) fly[++use]=<<i;
for(int i=;i<=n;i++){
for(int j=;j<i;j++) if(i!=j){
if(a[i].x==a[j].x) continue;
pao A=pao(a[i],a[j]);
if(!A.check()) continue;
int x=;
for(int k=;k<n;k++){
double p=A.get(a[k+].x);
if(fabs(p-a[k+].y)<=eps)
x=x|(<<k);
}
if(!b[x])
fly[++use]=x,b[x]=;
}
}
int end=<<n; f[]=;
for(int i=;i<end;i++){
for(int j=;j<=use;j++)
f[i|fly[j]]=min(f[i|fly[j]],f[i]+);
}
printf("%d\n",f[end-]);
} int main(){
freopen("angrybirds.in","r",stdin);
freopen("angrybirds.out","w",stdout);
int cas; scanf("%d",&cas);
while(cas--) Main();
return ;
}
【NOIP2016提高组】 Day2 T3 愤怒的小鸟的更多相关文章
- 【NOIP2016提高组day2】愤怒的小鸟
分析 Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于 (0, 0) 处,每次Kiana可以用它向第一象限发射一只红色的小鸟, 小鸟们的飞行轨迹均 ...
- Noip2016 提高组 Day2 T1 组合数问题
题目描述 组合数表示的是从n个物品中选出m个物品的方案数.举个例子,从(1,2,3) 三个物品中选择两个物品可以有(1,2),(1,3),(2,3)这三种选择方法.根据组合数的定 义,我们可以给出计算 ...
- 【NOIP2016提高组day2】蚯蚓
那么我们开三个不上升队列, 第一个记录原来的蚯蚓, 第二个记录乘以p的蚯蚓 第三个记录乘以(1-p)的蚯蚓, 在记录每条就要入队列的时间,就可以求出增加的长度 每次比较三个队列的队首,取最大的值x的切 ...
- NOIP2016提高组复赛C 愤怒的小鸟
题目链接:http://uoj.ac/problem/265 题目大意: 太长了不想概括... 分析: 状压DP的模板题,把所有可能的抛物线用二进制表示,然后暴力枚举所有组合,详情见代码内注释 代码如 ...
- 一道搜索题【2013 noip提高组 DAY2 t3】华容道
这篇不多说,具体的解释都在程序里 题目描述 [问题描述] 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面, 华容道是否根本就无法完成,如果 ...
- 2012Noip提高组Day2 T3 疫情控制
题目描述 H 国有 n 个城市,这 n 个城市用 n-1 条双向道路相互连通构成一棵树,1 号城市是首都,也是树中的根节点. H 国的首都爆发了一种危害性极高的传染病.当局为了控制疫情,不让疫情扩散到 ...
- 【题解】NOIP2016提高组 复赛
[题解]NOIP2016提高组 复赛 传送门: 玩具谜题 \(\text{[P1563]}\) 天天爱跑步 \(\text{[P1600]}\) 换教室 \(\text{[P1850]}\) 组合数问 ...
- 18/9/16牛客网提高组Day2
牛客网提高组Day2 T1 方差 第一眼看就知道要打暴力啊,然而并没有想到去化简式子... 可能因为昨晚没睡好,今天上午困死 导致暴力打了一个半小时,还不对... #include <algor ...
- 【题解】NOIP2016 提高组 简要题解
[题解]NOIP2016 提高组 简要题解 玩具迷题(送分) 用异或实现 //@winlere #include<iostream> #include<cstdio> #inc ...
- NOIP2016提高组解题报告
NOIP2016提高组解题报告 更正:NOIP day1 T2天天爱跑步 解题思路见代码. NOIP2016代码整合
随机推荐
- jQuery DataTables插件分页允许输入页码跳转
背景说明 项目中使用jQuery DataTables插件来实现分页表格,但是默认的分页样式不能输入页码进行跳转,在页数非常多的时候使用很不方便,最主要的还是没有达到产品部门的设计要求,所以我需要寻找 ...
- 2018.09.25 poj3070 Fibonacci(矩阵快速幂)
传送门 矩阵快速幂板题,写一道来练练手. 这一次在poj做题总算没忘了改万能库. 代码: #include<iostream> #include<cstdio> #define ...
- 47 On Interpersonal Relationship 关于人际关系
47 On Interpersonal Relationship 关于人际关系 ①Since we are social beings, the quality of our lives depend ...
- noexcept(c++11)
1.概念 1)c++中的异常处理是在运行时而不是编译时检测的,为了实现运行时检测,编译器可能会创建额外的异常处理代码,然而这会妨碍程序优化 2)noexcept说明符:若修饰函数(紧跟在参数列表后面) ...
- WriteableBitmap(三) 扩展
backbuffer使用您在创建WriteableBitmap时指定的像素格式,还有一个BackBufferStride属性,您可以使用它来创建一个合适的存储映射函数. 添加一些方法来设置和获取特定情 ...
- Hdu4632 Palindrome subsequence 2017-01-16 11:14 51人阅读 评论(0) 收藏
Palindrome subsequence Problem Description In mathematics, a subsequence is a sequence that can be d ...
- B-tree B+tree B*Tree
具体讲解之前,有一点,再次强调下:B-树,即为B树.因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树,其实,这是个非常不好的直译,很容易让人产生误解.如人们可能会以为B-树 ...
- 逆着得最长路POJ1797
POJ1797点击打开链接 这个题很是不错我感觉 很容易把这个题和上一个青蛙跳的题联系起来做,我也确实联系起来了,可还是没能完整得Ac,是因为我的算法思路还是最短路,这里错了 这个题目得要求是,从1到 ...
- MySQL Route负载均衡与读写分离Docker环境使用
Docker环境描述 主机名 部署服务 备注 MySQL Route MySQL Route 部署在宿主机上的MySQL Route服务 MySQL Master1 MySQL 5.7.16 Dock ...
- sklearn 中fit_tansform 与 transform的区别
https://blog.csdn.net/anecdotegyb/article/details/74857055 先fit_transform 后transform,不然会报错.