EZOJ #374学习
分析
二分天数
暴力判断即可
代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,a[100100],b[100100],c[100100],d[100100];
inline bool ck(int mid){
int x=mid,i,j,k;
for(i=1;i<=n;i++)d[i]=c[i];
for(i=1;i<=n;i++)d[i]=max(0ll,d[i]-x*b[i]);
for(i=1;i<=n;i++)
if(d[i]){
x-=((d[i]-1)/a[i]+1);
if(x<0)break;
}
if(x>=0)return 1;
return 0;
}
signed main(){
int i,j,k;
scanf("%d",&n);
for(i=1;i<=n;i++)scanf("%d%d%d",&c[i],&b[i],&a[i]),m=max(m,(c[i]-1)/b[i]+1);
int le=0,ri=m;
while(ri-le>1){
int mid=(le+ri)>>1;
if(ck(mid))ri=mid;
else le=mid;
}
printf("%d\n",ri);
return 0;
}