1 条题解
-
0
二分答案
可以看到答案肯定在1到23333333这个区间,容易想到暴力枚举,但是枚举太慢了,相比之下,二分答案代码量少,速度还快,还是考虑二分答案。
参考代码
#include <bits/stdc++.h> using namespace std; using i64 = long long; signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); int l = 0, r = 23333333, len = 23333333; const double &hs = 11625907.5798; auto &&check = [&](const int &x) { auto cntx = x, cnty = len - x; auto xi = 1.0 * cntx / len; auto yi = 1.0 * cnty / len; auto ans = -1 * cntx * xi * log2(xi) - cnty * yi * log2(yi); // 看一下计算出来的值,错误流不会输出到评测机中 cerr << fixed << ans << '\n'; return ans > hs; }; while(l < r) { auto mid = (l + r) >> 1; if(check(mid)) r = mid; else l = mid + 1; } cout << l; return 0; }
- 1
信息
- ID
- 1002
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 37
- 已通过
- 16
- 上传者