| 记录编号 |
608808 |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
| 题目名称 |
2561.[NOIP 2016]愤怒的小鸟 |
最终得分 |
100 |
| 用户昵称 |
李金泽 |
是否通过 |
通过 |
| 代码语言 |
C++ |
运行时间 |
0.693 s |
| 提交时间 |
2025-10-29 15:28:09 |
内存使用 |
3.65 MiB |
显示代码纯文本
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define N 18
#define fo(i,l,r) for(int i=l;i<=r;i++)
#define rf(i,r,l) for(int i=r;i>=l;i--)
#define db double
#define ll long long
#define ul unsigned long long
#define int long long
using namespace std;
int T,t[N],n,m,line[N][N],f[1<<N];db X[N],Y[N],x,y,z;const db eps=1e-9;
void swap(int &x,int &y){int t=x;x=y;y=t;}
int max(int x,int y){return x<y?x:y;}
int min(int x,int y){return x<y?x:y;}
db dbs(db x){return x<0?-x:x;}
int read(){
int sum=0;bool f=0;char c=getchar();
for(;c<48||c>57;c=getchar())if(c==45)f=1;
for(;c>=48&&c<=57;c=getchar())sum=sum*10+(c&15);
return f?-sum:sum;
}
signed main(){
freopen("angrybirds.in","r",stdin);freopen("angrybirds.out","w",stdout);
t[0]=1;fo(i,1,N-1)t[i]=t[i-1]<<1;
T=read();
while(T--)
{
memset(f,0x3f,sizeof(f));
n=read();read();m=1<<n;
fo(i,0,n-1)scanf("%lf%lf",X+i,Y+i);
fo(i,0,n-1)
fo(j,0,n-1)
{
line[i][j]=0;
db a=X[i]*X[i],b=X[i],c=X[j]*X[j],d=X[j],e=Y[i],f=Y[j];
if(dbs(a*d-b*c)<eps)continue;
x=(d*e-b*f)/(a*d-b*c);y=(a*f-c*e)/(a*d-b*c);
if(x>-eps)continue;
fo(k,0,n-1)
if(dbs(x*X[k]*X[k]+y*X[k]-Y[k])<eps)
line[i][j]|=t[k];
}
f[0]=0;
fo(s,0,m-2)
{
int i=0;for(;s&t[i];i++);
f[s|t[i]]=min(f[s|t[i]],f[s]+1);
fo(j,0,n-1)
if(!(s&t[j]))
f[s|line[i][j]]=min(f[s|line[i][j]],f[s]+1);
}
printf("%lld\n",f[m-1]);
}
return 0;
}