牛客8-K.Yet Another Problem About Pi

传送门

题意:

给你每个格子的长和宽,问你长度为圆周率的线最多能经过几个格子。

思路:

对于经过某点的格子来说,它可以花费无限小的长度来经过该点相接的4个格子,然后又因为给的是pi,所以该长度可以不计。于此,我们有两种走法,一种是沿着格子走较短路,但每次经过时只会额外经过2个格子,而如果走较长的对角线,则可以经过额外的3个格子,而对格子的选择可以采取以下方式:
计算额外的格子/距离来算得哪种走法最优,然后再判断开始和结束是否需要切换走法。

#include<cstdio>
#include<iostream>
#include<cstring>
#include<math.h>
#define ll long long
using namespace std;
double pi = acos(-1);

int main()
{
    
    
	int t;
	cin>>t;
	while(t--)
	{
    
    
		double w,d;
		cin>>w>>d;
		double a = min(w,d),b = sqrt(pow(w,2)+pow(d,2));
		ll ans = 0;
		for(int i = 0; i <= 2; i++)
		{
    
    
			if(pi-i*a>=0)
			ans = max(ans,(ll)(i*2+(ll)((pi-i*a)/b)*3.0));
			if(pi-i*b>=0)
			ans = max(ans,(ll)(i*3+(ll)((pi-i*b)/a)*2.0));
		}
		cout<<ans+4<<endl;
	}
}

おすすめ

転載: blog.csdn.net/p15008340649/article/details/119655069