求助,没过样例但是A了,过了样例但是WA了
查看原帖
求助,没过样例但是A了,过了样例但是WA了
205125
libohan0905楼主2022/11/21 21:56

RT,

#include<bits/stdc++.h>
using namespace std;
int n,m;
struct node{
	long double x,y;
}p[21];

set<int>s[21][21];
set<int>::iterator it;

int f[1<<19];//0die 1life

int main(){
	int T;
	scanf("%d",&T);
	while(T--){
		scanf("%d%d",&n,&m);
		for(int i=1;i<=n;i++){
			scanf("%Lf%Lf",&p[i].x,&p[i].y);
		}
		
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				if(p[i].x==p[j].x) continue;
				long double a=(p[j].x*p[i].y-p[i].x*p[j].y)/(p[i].x*p[j].x*(p[i].x-p[j].x));
				long double b=(p[i].y/p[i].x)-(a*p[i].x);
				if(a>-1e-9) continue;
//				if((p[j].y/p[j].x)-(a*p[j].x)!=b) continue;////////////删了这行就A了
				for(int k=1;k<=n;k++)
					if(fabs(a*p[k].x*p[k].x+b*p[k].x-p[k].y)<=1e-9) s[i][j].insert(k);				
//				printf("(%d %d):%.2Lf <%.2Lf %.2Lf> [%d]\n",i,j,a,b,(p[j].y-a*p[j].x*p[j].x)/p[j].x,s[i][j].size());
			}
		}
		for(int S=1;S<(1<<n);S++) f[S]=n;
		
		for(int S=0;S<(1<<n);S++) 
			for(int i=1;i<=n;i++){
				if(((S>>(i-1))&1)) continue;
				int nex=(S|(1<<(i-1)));
				f[nex]=min(f[nex],f[S]+1);
				for(int j=1;j<=n;j++){
					if(j==i||s[i][j].size()==0) continue;
					if(((S>>(j-1))&1)) continue;
					nex=S;
					for(it=s[i][j].begin();it!=s[i][j].end();++it){
						nex|=(1<<((*it)-1));
					}
//					printf(" i:%d j:%d S:%d -> nex:%d %d+1\n",i,j,S,nex,f[S]);
					f[nex]=min(f[nex],f[S]+1);
				}
			}
		printf("%d\n",f[(1<<n)-1]);
		
		for(int i=1;i<=n;i++)
			for(int j=1;j<=n;j++)
				s[i][j].clear();
			
	}
}
2022/11/21 21:56
加载中...