| 记录编号 |
608846 |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
| 题目名称 |
2561.[NOIP 2016]愤怒的小鸟 |
最终得分 |
100 |
| 用户昵称 |
梦那边的美好TE |
是否通过 |
通过 |
| 代码语言 |
C++ |
运行时间 |
6.310 s |
| 提交时间 |
2025-10-29 21:08:16 |
内存使用 |
4.87 MiB |
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const double eps=1e-8;
const int N=(1<<18);
int T,n,o,dp[N];
double x[20],y[20];
int line[20][20];
double fabs(double v){
return v<0?-v:v;
}
void work(){
scanf("%d %d",&n,&o);
for(int i=0;i<n;i++)scanf("%lf %lf",x+i,y+i);
memset(dp,0x3f,sizeof(dp));
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
line[i][j]=0;
if(i==j)line[i][j]|=(1<<j);
else{
double w=(x[i]*x[i])/(x[i]*x[i]+x[j]*x[j]);
double b=(y[i]-w*y[i]-w*y[j])/(x[i]-w*x[i]-w*x[j]);
double a=(y[i]-b*x[i])/(x[i]*x[i]);
if(a>0)continue;
if(fabs(a)<eps)continue;
for(int k=0;k<n;k++){
if(fabs(y[k]-a*x[k]*x[k]-b*x[k])<eps){
line[i][j]|=(1<<k);
}
}
}
}
}
dp[0]=0;
for(int i=0;i<(1<<n);i++){
for(int j=0;j<n;j++){
for(int k=0,S;k<n;k++){
S=(i|line[k][j]);
dp[S]=min(dp[S],dp[i]+1);
}
}
}
printf("%d\n",dp[(1<<n)-1]);
return;
}
int main(){
freopen("angrybirds.in","r",stdin);
freopen("angrybirds.out","w",stdout);
scanf("%d",&T);
while(T--)work();
return 0;
}