为了能到远方,脚下的每一步都不|

devoteeing

园龄:9个月粉丝:2关注:5

Final Boss(二分答案)

原题链接:

Problem - F - Codeforces

思路:

二分答案

代码:

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int xmmm=2e5+10;
int a[xmmm], b[xmmm];
int n, m;
int check(int x){
int sum=0;
for(int i=1;i<=n;i++){
sum+=(1+(x-1)/b[i])*a[i];
if(sum>m)return sum;//之前没加这句话, sum爆long long了;
}
return sum;
}
void solve(){
cin>>m>>n;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=n;i++)cin>>b[i];
int l=1, r=5e10+10;
while(l<r){
int mid=(l+r)/2;
if(check(mid)<m){
l=mid+1;
}
else r=mid;
}
cout<<l<<'\n';
}
signed main()
{
int T;cin>>T;
while(T--){
solve();
}
return 0;
}

总结:

可以很快确定是二分答案

注意边界不要陷入死循环,以及数据范围不要爆longlong 就可以了。

本文作者:devoteeing

本文链接:https://www.cnblogs.com/1747176348mi/p/18652123

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   devoteeing  阅读(15)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起