[NOIP2016 TG D2T3]愤怒的小鸟
题目大意:有一架弹弓位于(0,0)处,每次可以用它向第一象限发射一只小鸟,飞行轨迹均为形如y=ax2+bxy=ax+bx2 y=ax2+bx的曲线,且必须满足a<0(即是下开口的)
平面的第一象限中有n只绿色的小猪,其中第i只小猪所在的坐标为(xi,yi)。
如果某只小鸟的飞行轨迹经过了(xi,yi),那么第i只小猪就会被消灭掉,同时小鸟将会沿着原先的轨迹继续飞行;
求至少需要发射多少只小鸟才能消灭所有的小猪。(多组数据)
题解思路:
可以枚举每两只小猪,如果可以用一条抛物线经过(即y[i]≠y[j],且求出的a<0),那么把它记录下来,并且枚举其他小猪,如果可以顺带打掉,那么就压位记录一下,然后bfs(压位)枚举要打的猪,并把可以顺带打掉的猪打掉,就可以求出答案
C++ Code:
#include<cstdio>
#include<cstring>
using namespace std;
const double eps=1e-12;
int T,n,m;
double x[18],y[18],a,b;
int step[1<<18],t,w,q[1<<18];
bool can[18][18],v[1<<18];
int remain[18][18];
double abs(double a){return a>0?a:-a;}
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]);
for (int i=0;i<n;i++){
for (int j=0;j<n;j++){
can[i][j]=0;
remain[i][j]=(1<<n)-1;
if (i==j)continue;
if (x[i]==x[j])continue;
a=(y[i]*x[j]-y[j]*x[i])/(x[i]*x[i]*x[j]-x[j]*x[j]*x[i]);
if (a>=0)continue;
b=(x[i]*x[i]*y[j]-x[j]*x[j]*y[i])/(x[i]*x[i]*x[j]-x[j]*x[j]*x[i]);
can[i][j]=1;
remain[i][j]=(1<<n)-1;
for (int k=0;k<n;k++)if (abs(a*x[k]*x[k]+b*x[k]-y[k])<eps)remain[i][j]-=1<<k;
}
}
t=0;
memset(step,0,sizeof step);
memset(v,0,sizeof v);
step[q[w=1]=(1<<n)-1]=0;
v[(1<<n)-1]=1;
while (t<w){
int x=q[++t];
int i;
for (i=0;i<n;i++)if (x&(1<<i))break;
if (!v[x^(1<<i)]){
v[q[++w]=x^(1<<i)]=1;
step[x^(1<<i)]=step[x]+1;
}
for(int j=i+1;j<n;j++){
if ((x&(1<<j))&&(!(v[x&remain[i][j]]))&&can[i][j]){
step[q[++w]=(x&remain[i][j])]=step[x]+1;
v[x&remain[i][j]]=1;
}
}
}
printf("%d\n",step[0]);
}
return 0;
}
[NOIP2016 TG D2T3]愤怒的小鸟的更多相关文章
- 【NOIP题解】NOIP2017 TG D2T3 列队
列队,NOIP2017 TG D2T3. 树状数组经典题. 题目链接:洛谷. 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. ...
- NOIP2016 D2-T3 愤怒的小鸟
看了题解之后知道,是状压dp. 一.首先预处理一个$2^n$次方的fpow[]数组 fpow[]=; ;i<=;i++)fpow[i]=(fpow[i-]<<); 二.然后预处理一个 ...
- NOIp2016 D2T3 愤怒的小鸟【搜索】(网上题解正解是状压)
题目传送门 没啥别的想法,感觉就是搜索,经过原点的抛物线已知两个点就可以求出解析式,在还没有被打下来的两个猪之间随意配对,确定解析式之后标记在这个抛物线下被打下来的猪. 猪也可以单独用一个抛物线打下来 ...
- [luogu2831][noip d2t3]愤怒的小鸟_状压dp
愤怒的小鸟 noip-d2t3 luogu-2831 题目大意:给你n个点,问最少需要多少条经过原点的抛物线将其覆盖. 注释:1<=点数<=18,1<=数据组数<=30.且规定 ...
- [NOIP2017 TG D2T3]列队
题目大意:有一个$n \times m$的方阵,第$i$行第$j$列的人的编号是$(i-1) \times m + j$. 现在有$q$个出列操作,每次让一个人出列,然后让这个人所在行向左看齐,再让最 ...
- [NOIP2015 TG D2T3]运输计划
题目大意: 给你一棵n个节点的树,有边权,有多个任务,每个要求从ui号节点到 vi号节点去.m 个计划, 这 m 个计划会同时开始.当这 m 个任务都完成时,工作完成. 现在可以把任意一个边的边权变为 ...
- [NOIp2016提高组]愤怒的小鸟
题目大意: 平面直角坐标系的第一象限有n(n<=18)个点,你可以每次给出一个形如y=ax^2+bx的函数把经过这条函数的点消掉,问消掉所有的点至少要多少函数? 思路: 枚举每两个点对,可以唯一 ...
- NOIP2016 DAY2 T3 愤怒的小鸟
传送门 题目描述 Kiana 最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于 (0,0)(0,0) 处,每次 Kiana 可以用它向第一象限发射一只红色的 ...
- Noip2016 总结&反思
一直在期盼的联赛,真正来临时,却远不像我想象的样子. 有些事,真的不敢再想. 算法可以离线,时光却不能倒流.dfs可以回溯,现实却没有如果. 有些事,注定只能成为缺憾,抱恨终生. 不得不说今年Noip ...
随机推荐
- cocos2d-x3.7 cclabel文字破碎,异常,变乱
效果图如下: 无论是按钮(control button),还是普通的label都有小概率出现这种情况. 该问题发现于cocos2d-x3.7 原因: 在3.x中使用ttfconfig创建的label, ...
- 抓取Oracle数据快照
进入到oracle安装目录下的admin(找到这个目录)开启cmd键入sqlplus system/mima@实例名>@awrrpt.sql Would you like an HTML rep ...
- Windows运行机理——窗口和句柄
Windows运行机理这系列文章都是来至于<零基础学Qt4编程>——吴迪,个人觉得写得很好,所以进行了搬运和个人加工 1. 窗口 窗口是Windows应用程序中一个非常重要的元素,一个Wi ...
- 使用InstallShield-Limited-Edition制作安装包
1.打开此网站,进行注册,获取序列码以及下载InstallShield-Limited-Edition 2.安装完成之后,打开VisualStudio,新建项目 3.填写基本应用信息 4.配置相关信息 ...
- leetcode-前K个高频元素
给定一个非空的整数数组,返回其中出现频率前 k 高的元素. 示例 1: 输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2] 示例 2: 输入: nums = [1], ...
- maven 安装、配置
简介: maven 大大提高项目开发速度 编译---打包---测试--安装 一条龙 maven将项目构建的过程标准化,每一个阶段使用一个命令完成,下面是构建过程一些阶段 清理 mvn cl ...
- 关闭Tomcat进程 一条语句(必看)
写在开始 MAC系统下进行JAVA研发,经常遇到的一个问题就是杀死异常Tomcat 通常都是用两条指令,先查询出Tomcat占用的进程,再kill掉该进程, 其实有一种联合语句的方式可以一条语句直接关 ...
- RDL/RDLC批量单据打印 [转]
RDL/RDLC批量单据打印 使用RDL或RDLC进行单据打印时,单张单据打印比较直观简单,无需说明.下面我们来谈一下批量单据打印的实现方法.以下以RDL的ReportBuilder设计环境为例进行讲 ...
- 第一章 Windows编程基础(1~4课)
第一课:从main到WinMain 第二课:窗口和消息 第三课:MFC编程 第四课:MFC应用程序框架 概括: Win32的两种编程框架:SDK方式.MFC方式 1. SDK方式:使用WinMain入 ...
- c# byte[] 保存图片
1.用函数即可,File.WriteAllBytes(@"E:\123.bmp", pcBMPBuffer); 2.byte[]也可和image互相转化.