为了能到远方,脚下的每一步都不能少.|

Creeper_l

园龄:1年4个月粉丝:10关注:13

Prefix Purchase 题解

题意

给定一个长度为 \(n\) 的序列 \(ans\),初始值全部为 \(0\)。你一共有 \(k\) 个硬币,你可以选择花 \(a_{i}\) 个硬币来使 \(ans_{1}\)\(ans_{i}\) 中的所有数加一。求最终能得到的 \(ans\) 序列中字典序最大的一个。

思路

首先我们可以发现一个很显然的性质:如果满足 \(a_{i}>a_{i+1}\) 的话,那么选 \(i+1\) 位置一定比选 \(i\) 位置更优。所以我们就可以先将 \(a_{i}\) 赋值为 \(\min(a_{i},a_{i+1})\),这样就可以避免掉上面所说的这种情况了。

又因为题目要求最终序列的字典序最大(靠前的数字最大),所以我们肯定要贪心的去先选前面的,即从 \(a_{1}\) 开始选。但是我们会发现选完 \(a_{1}\) 之后 \(k\) 还会剩下一些,如果直接不管的话肯定不是最优的。所以我们就可以用 \(k\) 剩下的这些值去将一些选 \(a_{1}\) 的变成选 \(a_{2}\) 的,且个数不变,这样既可以保证当前的字典序不变(选 \(1\) 的个数没变),还可以让后面的字典序变大(选 \(2\) 的个数变多)。那么这样操作一定是更优的。那么就可以算出选 \(a_{2}\) 的数量就应该是:\((k-k \div a_{1} \times a_{1}) \div (a_{2}-a_{1})\)。意思是用 \(k\) 剩下的值除以每一次变化需要的代价。然后对于每一个 \(a_{i}\) 都进行这样的操作就可以了。

但是这里有几个点需要注意:

  • 因为除数不能为 \(0\),所以当 \(a_{i}=a_{i+1}\) 时,直接将 \(ans_{i}\) 赋值为 \(ans_{i-1}\) 就可以了。

  • 根据题目定义,显然 \(ans_{i+1}\) 不可能大于 \(ans_{i}\),所以操作的时候还需要特判一下。

Code

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define inf 0x3f
#define inf_db 127
#define ls id << 1
#define rs id << 1 | 1
#define re register
#define endl '\n'
typedef pair <int,int> pii;
const int MAXN = 2e5 + 10;
int T,n,k,mn = 1e18,a[MAXN],ans[MAXN];
signed main()
{
	cin >> T;
	while(T--)
	{
		cin >> n;
		mn = ans[0] = 1e18;
		for(int i = 1;i <= n;i++) cin >> a[i];
		for(int i = n;i >= 1;i--) mn = min(mn,a[i]),a[i] = mn; 
		cin >> k;
		for(int i = 1;i <= n;i++)
		{
			if(a[i] - a[i - 1] == 0) ans[i] = ans[i - 1];
			else ans[i] = min(k / (a[i] - a[i - 1]),ans[i - 1]);
			cout << ans[i] << " ";
			k -= (a[i] - a[i - 1]) * ans[i];
		}
		cout << endl;
		for(int i = 1;i <= n;i++) ans[i] = 0;
	}
	return 0;
} 

本文作者:Creeper_l

本文链接:https://www.cnblogs.com/Creeperl/p/17913427.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Creeper_l  阅读(6)  评论(0编辑  收藏  举报
  1. 1 イエスタデイ(翻自 Official髭男dism) 茶泡饭,春茶,kobasolo
  2. 2 世间美好与你环环相扣 柏松
  3. 3 True love tired
  4. 4 一笑江湖 (DJ弹鼓版) 闻人听書_
  5. 5 最好的安排 曲婉婷
  6. 6 星星在唱歌 司南
  7. 7 山川 李荣浩
  8. 8 On My Way Alan Walker
  9. 9 百战成诗 王者荣耀·100英雄官方群像献礼歌
  10. 10 雪 Distance Capper / 罗言
  11. 11 Edamame bbno$ / Rich Brian
  12. 12 半生雪 七叔-叶泽浩
  13. 13 Catch My Breath Kelly Clarkson
  14. 14 Love Is Gone SLANDER / Dylan Matthew
  15. 15 Endless Summer Alan Walker / Zak Abel
  16. 16 悬溺 葛东琪
  17. 17 风吹丹顶鹤 葛东琪
  18. 18 Normal No More TYSM
  19. 19 哪里都是你 队长
  20. 20 Stronger Kelly Clarkson
  21. 21 廖俊涛
  22. 22 消愁 毛不易
  23. 23 The Runner Yubik
  24. 24 踏山河 七叔-叶泽浩
  25. 25 Waiting For Love Avicii
  26. 26 在你的身边 盛哲
  27. 27 Dream It Possible Delacey
  28. 28 凄美地 郭顶
  29. 29 满天星辰不及你 ycc
  30. 30 侧脸 于果
  31. 31 阿拉斯加海湾 蓝心羽
  32. 32 虞兮叹 闻人听書_
  33. 33 离别开出花 就是南方凯
  34. 34 盗墓笔记·十年人间 李常超 (Lao乾妈)
雪 Distance - Capper / 罗言
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起