1 条题解
-
1
厮。。。
这题本身不难,难的是要想到用双二分:
-
第一个二分:求打败所有怪的最小战力
-
第二个二分:分训练的天数。
代码来喽(我知道你们只想看这里)
#include<bits/stdc++.h> const int N=2e5+5; typedef long long ll; using namespace std; ll n,m,x,pw; struct node{ ll a; ll b; };node aa[N]; int cmp(node x,node y){ return x.a<y.a; } int check1(ll mid){ for(int i=0;i<n;i++){ if(mid>aa[i].a) mid+=aa[i].b; else return 0; } return 1; } int check2(ll mid,ll x,ll pw){ ll cnt=x; if(mid%2) cnt+=(mid/2)*(mid/2+1) + mid/2+1; else cnt+=(mid/2)*(mid/2+1); return cnt>=pw; } int main(){ freopen("road.in","r",stdin); freopen("road.out","w",stdout); cin>>n; for(int i=0;i<n;i++){ cin>>aa[i].a; } for(int i=0;i<n;i++){ cin>>aa[i].b; } sort(aa,aa+n,cmp); ll l=0,r=1e9; while(l<r){ ll mid=(l+r)/2; if(check1(mid)) r=mid; else l=mid+1; } pw=l; cin>>m; while(m--){ cin>>x; ll l=0,r=1e9; while(l<r){ ll mid=(l+r)/2; if(check2(mid,x,pw)) r=mid; else l=mid+1; } cout<<l<<" "; } return 0; }
不点赞(绿色的)就走??扔出去!!
-
- 1
信息
- ID
- 774
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- (无)
- 递交数
- 61
- 已通过
- 16
- 上传者