95分,求助
查看原帖
95分,求助
142327
C6H2CH3_NO2_3楼主2021/6/30 09:31

#8 WA 读到6,正确5 代码:

#include<bits/stdc++.h>
#define ll long long
#define maxn 20
#define inf 1e16
using namespace std;
ll read(){
	ll f=1,k=0;
	char c=0;
	while(c<'0'||c>'9'){
		if(c=='-')f=-1;
		c=getchar();
	}
	while((c>='0'&&c<='9')||c=='.'){
		if(c=='.'){c=getchar();continue;}
		k=k*10+c-'0';
		c=getchar();
	}
	return k*f;
}
void out(ll x){
	if(x<0){
		x=-x;
		putchar('-');
	}
	if(x>=10)out(x/10);
	putchar(x%10+'0');
}
ll gcd(ll a,ll b){
	if(a%b==0)return b;
	return gcd(b,a%b);
}
struct Hash{
    Hash *Next=NULL;
	ll am,az,bm,bz,zt=0;
}H[105];
void pushIn(Hash *&now,ll am,ll az,ll bm,ll bz,ll zt){
	if(now==NULL){
		now=new Hash;
		now->Next=NULL;
        now->am=am;
		now->az=az;
		now->bm=bm;
		now->bz=bz;
		now->zt=zt;
		return;
	}
    if(now->am==am&&now->az==az&&now->bm==bm&&now->bz==bz){
		(now->zt)|=zt;
			return;
	}
	pushIn(now->Next,am,az,bm,bz,zt);
}
ll ABS(ll x){
	return(x<0?(-x):x);
}
ll T,n,m,x[maxn],y[maxn],f[(1<<20)];
ll chkmin(ll a,ll b){
	return(a>b?b:a);
}
void Find(Hash *now,ll i){
    if(now==NULL)return;
	if((i&now->zt)==now->zt){
		f[i]=chkmin(f[i],f[i-now->zt]+1);
	}
	Find(now->Next,i);
}
void pre(){
    for(ll i=1;i<=100;i++)H[i].Next=NULL;
}
int main(){
//	freopen("g.in","r",stdin);
	T=read();
	while(T--){
		pre();
		n=read();m=read();
        for(ll i=1;i<=n;i++){
			x[i]=read();y[i]=read();
			for(ll j=1;j<i;j++){
				if(x[i]==x[j])continue;
                ll am=x[i]*x[j]*(x[i]-x[j]),az=x[j]*y[i]-x[i]*y[j],bm=am,bz=x[i]*x[i]*y[j]-x[j]*x[j]*y[i];
				if(am*az>=0)continue;
				ll ka=gcd(ABS(am),ABS(az)),kb=gcd(ABS(bm),ABS(bz));
				am=ABS(am)/ka;
				bm=ABS(bm)/kb;
				az=ABS(az)/ka;
				bz=ABS(bz)/kb;
				pushIn(H[am%97+1].Next,am,az,bm,bz,((1<<(i-1))|(1<<(j-1))));
			}
		}
        for(ll i=1;i<=(1<<n)-1;i++){
			f[i]=inf;
			for(ll j=1;j<=n;j++){
				if(i&(1<<(j-1))){
				f[i]=chkmin(f[i],f[i-(1<<(j-1))]+1);
				}
			}
			for(ll j=1;j<=97;j++){
				Find(H[j].Next,i);
			}
		}
        out(f[(1<<n)-1]);putchar('\n');
	}
	return 0;
}
2021/6/30 09:31
加载中...