1 条题解
-
0
对于每个 ,我可以将其分解为不同 的贡献,其中 是立方根的下取整。利用数学公式计算前缀和,再结合二分查找计算立方根。
AC code:
#include <bits/stdc++.h> using namespace std; #define ll long long ll cube_root(ll x) { if (x == 0) return 0; ll k = (ll)cbrt(x + 0.5); while (k * k * k > x) { k--; } while ((k + 1) * (k + 1) * (k + 1) <= x) { k++; } return k; } int main() { freopen("b.in","r",stdin), freopen("b.out","w",stdout); int q; cin >> q; while (q--) { ll x; cin >> x; ll m = cube_root(x), sum = 0; if (m >= 1) { ll t = m - 1; ll sum1 = t * (t + 1) / 2; ll sum2 = t * (t + 1) * (2 * t + 1) / 6; ll sum3 = sum1 * sum1; sum = 3 * sum3 + 3 * sum2 + sum1; sum += m * (x - m * m * m + 1); } cout << sum << endl; } return 0; }
- 1
信息
- ID
- 186
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 4
- 标签
- 递交数
- 5
- 已通过
- 3
- 上传者