赚米
题目链接:https://ac.nowcoder.com/acm/contest/103867/D
题意:
已经知道物体价格走势,每天可以买入一定量的物体,要求必须次日卖出。求使最后赚得利润大于M的最小本金X为多少
思路:
二分答案+贪心枚举
对于每一天,如果下一天物体价格上涨,那么买入尽可能多地买入囤货,次日卖出
每次都需要判断获得利润是否大于等于M,因为利润S可能爆long long
int a[maxn];
int n,m;
bool check(int mid){
int s=mid;
for(int i=1;i<=n-1;i++){
if(a[i+1]-a[i]>0){
int num=s/a[i];
s+=num*(a[i+1]-a[i]);
if((s-mid)>=m)return true;
}
}
return (s-mid)>=m;
}
void solve(){
cin>>n>>m;
rep(i,1,n){
cin>>a[i];
}
int l=0,r=1e18+5,res=-1;
while(l<=r){
int mid= l+r>>1;
if(check(mid)){
res=mid;
r=mid-1;
}else{
l=mid+1;
}
}
if(res>=1e18){
cout<<-1<<endl;return;
}
cout<<res<<endl;
}

浙公网安备 33010602011771号