求助,微小精度差
查看原帖
求助,微小精度差
169594
Heart_Of_Iron_4楼主2024/6/27 10:48

大数据差了0.0018

#include<bits/stdc++.h>
using namespace std;
#define int long long 
#define FOR(qwe,wer,ert) for(int qwe=wer;qwe<=ert;++qwe)
#define dts(qwe,wer,ert,rty) (sqrtl((qwe-ert)*(qwe-ert)+(wer-rty)*(wer-rty)))
int n,m,t;
long double ans;
long double dis(int x,int y)
{
	/*if(x*2==(n+1))
	{
		if(y*2>=(m+1))return dts(x,y,1,1);
		else return dts(x,y,n,m);
	}
	if(y*2==(m+1))
	{
		if(x*2>=(n+1))return dts(x,y,1,1);
		else return dts(x,y,n,m);
	}*/
	return max(max(dts(x,y,1,1),dts(x,y,n,1)),max(dts(x,y,1,m),dts(x,y,n,m)));
}
signed main()
{
	scanf("%lld",&t);
	scanf("%lld",&t);
	while(t--)
	{
		ans=0;
		scanf("%lld%lld",&n,&m);
		printf("%lld ",n*m-(((n+1)/2)*((m+1)/2)));
		if(n<3&&m<3)printf("0");
		else
		{
			for(int i=1;i<=n;i+=2)
			for(int j=1;j<=m;j+=2)
			{
				if((i-2)*2<=n&&i*2>n&&n%2==0)i++;
				if((j-2)*2<=m&&j*2>m&&m%2==0)j++;
				ans+=dis(i,j);
			}
		}
		printf("%0.9lf\n",(double)ans);
	}
	return 0;
}
2024/6/27 10:48
加载中...