C++ 代码优化:二分查找求解最大可行值
#include
bool check(int x) { int cnt = 0; for(int i = 0; i < n; i++) { int tmp = (x - a[i]) / b[i]; if((x - a[i]) % b[i] != 0) tmp++; // 修改1:如果除不尽,需要加上1 if(tmp < 0) tmp = 0; cnt += tmp; } for(int i = 0; i < m; i++) { int tmp = (x - c[i]) / d[i]; if((x - c[i]) % d[i] != 0) tmp++; // 修改2:如果除不尽,需要加上1 if(tmp < 0) tmp = 0; cnt -= tmp; } return cnt > 0; }
int main() { cin >> t; cin >> n; for(int i = 0; i < n; i++) cin >> a[i] >> b[i]; cin >> m; for(int i = 0; i < m; i++) cin >> c[i] >> d[i]; int l = 0, r = t; while(l < r) { int mid = l + r >> 1; if(check(mid)) r = mid; else l = mid + 1; } cout << l << endl; return 0; }
原文地址: https://www.cveoy.top/t/topic/ohJ6 著作权归作者所有。请勿转载和采集!