Yet Another Problem About Pi
先上链接:牛客原题链接
题意:你可以走PI m的长度,求你最多能去往多少个区域。每个区域的宽为w,长为d。
输入:
2 5 5
1.5 1.5
输出
4
8
思路:
显然开始位置在区域的格点处最优:直接ans=4;
我们需要走更多的格点。
接下来只有两种行进方向,一种是横着或竖着(看w与d的关系):每次可以增加两个区域,另一种为斜着走:每次增加三个区域。
最后求 2x+3y+4 的最大值,我们直接列举x就可以了
代码
#include<bits/stdc++.h>
using namespace std;
const double PI=acos(-1.0);
int main(){
int t;scanf("%d",&t);
while(t--){
double x,y;
scanf("%lf%lf",&x,&y);
double t=sqrt(x*x+y*y);
x=min(x,y);
int ans=4;
if(x/2>t/3){
for(int i=0;i<100;i++){
if(i*x>PI)break;
int j=(PI-i*x)/t;
ans=max(ans,i*2+j*3+4);
}
}
else{
for(int i=0;i<100 ;i++){
if(i*t>PI)break;
int j=(PI-i*t)/x;
ans=max(ans,i*3+j*2+4);
}
}
cout<<ans<<"\n";
}
return 0;
}
注意 如果删去for循环中的i<100就会超时。(1000也可以)
因为T的范围为1 e 5