本文主要是介绍[codeplus 11月月赛]T2 timber,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
传送门
一样一个大水题。。
明显就是一个二分答案呀。。
做法很明显,就是直接二分答案,然后线性扫一遍判断就好了。。。
没了
对了,答案有超过1e9的,然后貌似要开个int128,这样才可以算
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#define ll __int128
using namespace std;
inline ll read(){ll x=0;char ch=' ';int f=1;while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();if(ch=='-')f=-1,ch=getchar();while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+(ch^48),ch=getchar();return x*f;
}
const int N=2e5+5;
int n;
ll S,L,h[N],a[N];
inline bool check(ll mid){ll sum=0;for(int i=1;i<=n;i++){ll tmp=h[i]+a[i]*mid;if(tmp>=L)sum+=tmp;if(sum>=S)return true;}return false;
}
int 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();ll l=0,r=1e18,mid;while(l<r){mid=(l+r)>>1;if(check(mid))r=mid;else l=mid+1;}printf("%lld",l);return 0;
}
这篇关于[codeplus 11月月赛]T2 timber的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!