警钟撅烂!!!
查看原帖
警钟撅烂!!!
656765
STARSczy楼主2023/8/19 14:26

二分一定要从1到1e18,不是1e9,否则只能得85分

#include<bits/stdc++.h>
#define int __int128
using namespace std;
const int maxn=2e5+10,mod=1e9+7;
inline int read(){
	int c,w=0,n=0;
	while((c=getchar())<'0'||'9'<c) w=c=='-';
	do n=n*10+c-'0';while('0'<=(c=getchar())&&c<='9');
	return w?-n:n;
}
inline int write(int n){
	if(n<0) putchar('-'),n=-n;
	if(n>9) write(n/10);
	putchar(n%10+'0');
	return n;
}

int n,s,l,h[maxn],a[maxn];
int solve(int mid){
	int cnt=0;
	for(int i=1;i<=n;++i) if(h[i]+mid*a[i]>=l) cnt+=h[i]+mid*a[i];
	return cnt>=s;
}

signed main(){
	n=read(),s=read(),l=read();
	for(int i=1;i<=n;++i) h[i]=read();
	for(int i=1;i<=n;++i) a[i]=read();
	int l=0,r=1e18,ans;//一定要1e18,不是1e9,否则只能得85分
	while(l<=r){
		int mid=(l+r)>>1;
		if(solve(mid)) ans=mid,r=mid-1;
		else l=mid+1;
	}
	write(ans);
	return 0;
}
2023/8/19 14:26
加载中...