题目
本题是几何、数学和枚举的结合。
最坏情况:当
w
>
=
π
w>=\pi
w>=π 且
d
>
=
π
d>=\pi
d>=π时,此时最多只能以四个矩形的交点为起点,绕一周,覆盖四个矩形;
可以考虑到两种情况:
斜线:可以越过三个形成角落的矩形,此时
d
i
s
=
a
2
+
b
2
dis=\sqrt{a^{2}+b^{2}}
dis=a2+b2;
直线:可以越过两个相邻的角落,此时
l
e
n
=
m
i
n
(
w
,
d
)
len=min(w, d)
len=min(w,d);
这两种情况最多出现两次。本菜鸡进行分析,对于两个端点来说,是很可能采用这两种情况,使得覆盖的矩形尽可能多。
这也是赛后补题的时候,看到别人的解释。说实话,自己推的时候,也推到斜线以及可以经过两个矩形的直线,但是就是无法抽象为数学公式,觉得自己无法总结出规律。这场比赛的总体情况都是这样,不是没有思考过程,也不是没有思考过相应的结果,但是就是无法转化以及代码实现。
#include <bits/stdc++.h>
using namespace std;
#define T int T; scanf("%d", &T); while(T--)
typedef long long ll;
const double PI=acos(-1.0);
int main()
{
T{
double w, d, len, dis;
scanf("%lf%lf", &w, &d);
len=min(w, d);
dis=sqrt(w*w+d*d);
ll ans=0;
for(int i=0; i<=2; i++){
if(i*len<=PI)
ans=max(ans, (ll)(4+2*i+floor((PI-i*len)/dis)*3));
if(i*dis<=PI)
ans=max(ans, (ll)(4+3*i+floor((PI-i*dis)/len)*2));
}
printf("%lld\n", ans);
}
return 0;
}