记录编号 608808 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 2561.[NOIP 2016]愤怒的小鸟 最终得分 100
用户昵称 Gravatar李金泽 是否通过 通过
代码语言 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;
}