点击跳转例题
思路:因为答案满足二段性,和单调性,所以我们二分答案
#include <bits/stdc++.h> #define int long long //(有超时风险) #define PII pair<int,int> #define endl '\n' using namespace std; const int N=2e6+10,M=1e3+10,mod=998244353,INF=0x3f3f3f3f; int n,m; int a[N],b[N]; bool check(int mid) { int cnt=0; for(int i=1;i<=n;i++) { if(a[i]+b[i]<mid)return false; cnt+=max(mid-a[i],0ll); } return cnt<=m; } signed main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); cin>>n>>m; for(int i=1;i<=n;i++)cin>>a[i]; for(int i=1;i<=n;i++)cin>>b[i]; int l=0ll,r=4e5; while(l<r) { int mid=(l+r+1)/2; if(check(mid))l=mid; else r=mid-1; } cout<<l<<endl; return 0; }
P8800 [蓝桥杯 2022 国 B] 卡牌--二分
最新推荐文章于 2024-07-24 15:50:22 发布