【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代码整合
随机推荐
- const当做标记的函数重载,但是仅仅是限于类里面的成员函数
(1)我们知道函数的重载时根据函数的参数类型以及函数参数个数来重载的,不能用函数返回值来重载函数.但是有时候函数参数个数和函数参数类型重载函数会和默认参数发生冲突: int fun(int i,cha ...
- 11) 生成可执行jar文件 maven-shade-plugin
搜索 site:maven.apache.org maven-assembly-plugin http://maven.apache.org/plugins/maven-assembly-plugin ...
- WPF图形图像相关类
BitmapMetadata类: 继承自抽象类ImageMetadata,包含图像的原数据信息,如相机型号.图像修改程序名称.拍照日期.拍照地点等.ImageSoure类包含ImageMetadata ...
- golang的json操作[转]
package main import ( "encoding/json" "fmt" "os" ) typ ...
- iPhone 物理尺寸与分辨率
// iPhone 物理尺寸(pt:Point) 分辨率(px) // 4S 320*480(3.5英寸) 640*960 // 5,5c,5S 32 ...
- jmeter 5.0版本更新说明(个人做个记录)
变化 此页面仅详细说明了当前版本中所做的更改. 先前更改的历史记录中详细介绍了早期更改. 5.0版 摘要 新的和值得注意的 不兼容的变化 Bug修复 改进 非功能性变化 已知问题和解决方法 谢 ...
- 软件工程网络15个人作业4(201521123010徐璐琳)——alpha阶段个人总结
一.个人总结 1. 总结自己的alpha 过程: 经过了两周的ALPHA阶段,在这之中学习到了很多,因为最开始其实是有抱着一种应付的.将就着的心理去做这个小程序,但是在完成项目的过程中,有老师和助教一 ...
- [译]window.onerror事件
本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU& ...
- POJ3104 Drying 2017-05-09 23:33 41人阅读 评论(0) 收藏
Drying Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 15604 Accepted: 3976 Descripti ...
- HTML5+规范:Webview(管理应用窗口界面)
一.知识点 Webview模块管理应用窗口界面,实现多窗口的逻辑控制管理操作.通过plus.webview可获取应用界面管理对象. 1.方法 1.1.all: 获取所有Webview窗口 Array[ ...