1 条题解
-
0
C++ :
#include <bits/stdc++.h> using namespace std; long long n, m, a, b; bool check(long long t){ if ((a + b) * t > n + m) return false; if (a == b){ if (a * t <= n && a * t <= m) return true; else return false; } double low, high; if (a > b){ low = (1.0 * a * t - m) / (a - b); high = (1.0 * n - b * t) / (a - b); } else{ low = (1.0 * n - b * t) / (a - b); high = (1.0 * a * t - m) / (a - b); } long long L = ceil(low); long long R = floor(high); L = max(L, (long long)0); R = min(R, t); return (L <= R); } int main(){ cin >> n >> m; cin >> a >> b; long long ans = 0; long long left = 0; long long right = max(n, m) / min(a, b) + 1; while (left <= right){ long long mid = (left + right) / 2; if (check(mid)){ ans = mid; left = mid + 1; } else{ right = mid - 1; } } cout << ans; return 0; }
- 1
信息
- ID
- 5642
- 时间
- 400ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者