用long long就有第1,2组过不了,改成unsigned long long就过了。
难道前两组数据有负值!!!
#include <cstdio>
using namespace std;
const int N=2e5+10;
typedef long long LL;//改为unsigned long long 就能过
LL s,l;
int n,h[N],d[N];
bool check(LL x){
LL cnt=0;
for(int i=0;i<n;i++){
LL t=h[i]+d[i]*x;
if(t>=l) cnt+=t;
if(cnt>=s) break;
}
if(cnt>=s) return true;
return false;
}
int main(){
scanf("%d%lld%lld",&n,&s,&l);
for(int i=0;i<n;i++) scanf("%d",&h[i]);
for(int i=0;i<n;i++) scanf("%d",&d[i]);
LL l=0,r=1e18;
while(l<r){
LL mid=(l+r)/2;
if(check(mid)) r=mid;
else l=mid+1;
}
printf("%lld\n",l);
return 0;
}
拜托各位大佬,先谢谢!