题意:
给你每个格子的长和宽,问你长度为圆周率的线最多能经过几个格子。
思路:
对于经过某点的格子来说,它可以花费无限小的长度来经过该点相接的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;
}
}