3 条题解
-
0
写了个开区间二分,感觉在需要函数二分时比较好理解
#include <bits/stdc++.h> using namespace std; #define int long long int t, n, k, sum; void solve() { cin >> n >> k; int l = max(-1ll, n / 2 - 1), r = n; const int sum = (2 * k + n - 1) * n / 2; auto f = [&](int m) { return (2 * k + m) * (m + 1) - sum; }; while (r - l > 1) { int mid = l + (r - l) / 2; if (f(mid) < 0) { l = mid; } else if (f(mid) > 0) { r = mid; } else { break; } } l = max(0ll, l), r = min(r, n - 1); cout << min(abs(f(l)), abs(f(r))) << '\n'; } signed main() { cin >> t; while (t--) { solve(); } return 0; }
信息
- ID
- 1048
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- (无)
- 递交数
- 28
- 已通过
- 8
- 上传者