题目大意
"
Pahom 从黎明开始,到日落结束,使用铲子做标记,走动的区域尽可能大。由标记点组成的多边形代表Pahom所宣称的土地。
Pahom 每秒走一米,每个标记点需要 m 秒制作,从黎明到日落总共有 t 秒可用时间。找出Pahom可以宣称的最大区域。
Pahom必须在结束时返回起点。
"
思路讲解
这个函数可以三分啊。对,就是可以三分嗯。

P的这个单调性和 tan 的单调性是相反的。

从图像上,可以看出其上升速度是比较缓慢的,和 x 同阶。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| auto fx=[&](ll n) -> DB { ll perimeter=total_tim-n*mark_time; DB res=0.5*perimeter*perimeter/(2.0*n); res/=tan(pi/n); return res; }; while (r-l>9) { ll mid1=l+(r-l)/3,mid2=r-(r-l)/3; if (fx(mid1)>fx(mid2)) { r=mid2; }else { l=mid1; } }
|
AC代码
AC
https://qoj.ac/submission/2010802
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
#include <bits/stdc++.h> #define all(vec) vec.begin(),vec.end() #define lson(o) (o<<1) #define rson(o) (o<<1|1) #define SZ(a) ((long long) a.size()) #define debug(var) cerr << #var <<":"<<var<<"\n"; #define cend cerr<<"\n-----------\n" #define fsp(x) fixed<<setprecision(x)
using namespace std;
using ll = long long; using ull = unsigned long long; using DB = long double;
using CD = complex<double>;
static constexpr ll MAXN = (ll)1e6+10, INF = (1ll<<61)-1; static constexpr ll mod = 998244353; static constexpr double eps = 1e-8; const double pi = acos(-1.0);
ll lT,testcase;
void Solve() { ll mark_time,total_tim; cin >> mark_time >> total_tim;
if (total_tim-3*mark_time<0) { cout<<0<<"\n"; return; } ll l=3,r=total_tim/mark_time; auto fx=[&](ll n) -> DB { ll perimeter=total_tim-n*mark_time; DB res=0.5*perimeter*perimeter/(2.0*n); res/=tan(pi/n); return res; }; while (r-l>9) { ll mid1=l+(r-l)/3,mid2=r-(r-l)/3; if (fx(mid1)>fx(mid2)) { r=mid2; }else { l=mid1; } } DB ans=0; for (ll i=l;i<=r;++i) { ans=max(ans,fx(i)); } cout<<fsp(12)<<ans<<"\n"; }
signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); #ifdef LOCAL cout.setf(ios::unitbuf); #endif
cin >> lT; for (testcase=1;testcase<=lT;++testcase) Solve(); return 0; }
|
心路历程(WA,TLE,MLE……)