求助,被卡精度了
查看原帖
求助,被卡精度了
184055
Beyond616楼主2020/10/30 21:21
#include<cstdio>
#include<cmath>
#define ll long long
#define ld double
#define eps 1e-8
ll n,ans,maxn,c,T,m,maxj;
struct node1
{
	ld a,b;
	void print()
	{
		printf("y=%lfx^2+%lfx\n",a,b);
	}
}k,maxk;
struct node
{
	ld x,y;
	bool p;
	void read()
	{
		scanf("%lf%lf",&x,&y);
		p=1;
	}
	bool in(node1 d)
	{
		if (abs(d.a*x*x+d.b*x-y)<=eps) 
		return true; return false;
	}
}pig[30];
bool Empty()
{
	for (ll i=1;i<=n;++i)
	if (pig[i].p)
	return false; return true;
}
bool xd(ld a,ld b)
{
	return abs(a-b)<=eps;
}
node1 count(ll i,ll j)
{
	node1 p;
	ld r1=pig[i].x*pig[i].x,
	s1=pig[i].x,
	r2=pig[j].x*pig[j].x,
	s2=pig[j].x,
	c1=pig[i].y,
	c2=pig[j].y;
	p.a=(c1*s2-c2*s1)/(r1*s2-r2*s1);
	p.b=(c1*r2-c2*r1)/(s1*r2-s2*r1);
	return p;
}
bool xxd(ll i,ll j)
{
	return abs(pig[i].x-pig[j].x)<=eps;
}
void solve()
{
	scanf("%lld%lld",&n,&m);
	ans=0;
	for (ll i=1;i<=n;++i) pig[i].read();
	maxn=0;
	for (ll i=1;i<=n;++i)
	{
		if (!pig[i].p) continue;
		maxj=i,c=1,maxn=1;
		for (ll j=1;j<=n;++j)
		{
			c=1;
			if (i==j||!pig[j].p||xxd(i,j)) continue;
			k=count(i,j);
			if (k.a>=0.0) continue;
			++c;
			for (ll o=1;o<=n;++o)
			{
				if (o==i||o==j||!pig[o].p||xxd(i,o)||xxd(j,o)||!pig[o].in(k)) continue;
				++c;
			}
			if (c>maxn) maxn=c,maxj=j,maxk=k;
		}
		maxk.print();
//		if (!c) continue;
		for (ll o=1;o<=n;++o)
		{
			if (o==i||o==maxj||!pig[o].p||!pig[o].in(maxk)) continue;
			pig[o].p=0;
		}
		pig[i].p=pig[maxj].p=0;
		++ans;
	}
	printf("%lld\n",ans);
}
int main()
{
	scanf("%lld",&T);
	while (T--) solve();
}
2020/10/30 21:21
加载中...