蓝桥杯 ALGO-985 幸运的店家(贪心)
2022/2/19 23:12:40
本文主要是介绍蓝桥杯 ALGO-985 幸运的店家(贪心),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
试题 算法训练 幸运的店家
资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
炫炫开了一家商店,卖的货只有一个,XXX,XXX卖N元钱。有趣的是,世界上只有面值为3的幂的纸币,即纸币只有1元的、3元的、9元的。。。。,有一天,桥神来买XXX,可他没办法正好给出N元钱,而炫炫没法找零,于是他只好用他的钱凑出了一个比N大,并且最小的价值,交给了炫炫。炫炫想知道,他这次最多可以得到多少张纸币。
输入格式
一个数,N
输出格式
一个数,为答案
样例输入
4
样例输出
2
数据规模和约定
n<=10^17
思路:
-
答案必不使用1元,可证明:若需要使用若干1元,得到x,满足x > N。那么去掉1元,得到x1,可能满足
x1 >= N
,当x1 > N
,可知x不是最小,当x1 = N
,不符合题意。 -
3的幂都能由若干3表示,那么要取得最多,就要全部使用3组合(这应该就是贪心的地方)
-
分情况,若N不能被3整除,结果就是
N / 3 + 1
,若N能被3整除,则答案是n / 3 + 1
(将N的所有3因子除掉后得到n,即n满足3^k * n = N
)如果N能被3整除,那么全用3组合就不符合题意了,而可以用3的某次幂来组合,组合的次数就等于
n / 3 + 1
,例:12 = 3 x 4
,可以用 3 来组合4,即 3 + 3 , 那么就可以用3 x (3 + 3) = 9 + 9
组合 12则最复杂的情况也就是O(\(log_{3}n\))
要点:
- n<=10^17,使用 long long 来读
代码:
#include <iostream> using namespace std; typedef long long LL; LL n, res; int main (){ cin >> n; if (n % 3) res = (n / 3) + 1; else { while (n % 3 == 0) n /= 3; res = (n / 3) + 1; } cout << res << endl; return 0; }
吐槽:
这个用搜索的方法几乎不可能了吧,贪心快但是好难想哇pwp
这篇关于蓝桥杯 ALGO-985 幸运的店家(贪心)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-03如何用Google Gemini和MyScaleDB打造一个基于检索增强生成技术的聊天机器人
- 2024-12-24MongoDB资料:新手入门完全指南
- 2024-12-20go-zero 框架的 RPC 服务 启动start和停止 底层是怎么实现的?-icode9专业技术文章分享
- 2024-12-19Go-Zero 框架的 RPC 服务启动和停止的基本机制和过程是怎么实现的?-icode9专业技术文章分享
- 2024-12-18怎么在golang中使用gRPC测试mock数据?-icode9专业技术文章分享
- 2024-12-15掌握PageRank算法核心!你离Google优化高手只差一步!
- 2024-12-15GORM 中的标签 gorm:"index"是什么?-icode9专业技术文章分享
- 2024-12-11怎么在 Go 语言中获取 Open vSwitch (OVS) 的桥接信息(Bridge)?-icode9专业技术文章分享
- 2024-12-11怎么用Go 语言的库来与 Open vSwitch 进行交互?-icode9专业技术文章分享
- 2024-12-11怎么在 go-zero 项目中发送阿里云短信?-icode9专业技术文章分享