赚米

题目链接: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;
}
posted @ 2025-04-10 14:36  Marinaco  阅读(26)  评论(0)    收藏  举报
//雪花飘落效果