专栏文章
CF2132C1 The Cunning Seller (easy version)
CF2132C1题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mio68w18
- 此快照首次捕获于
- 2025/12/02 14:02 3 个月前
- 此快照最后确认于
- 2025/12/02 14:02 3 个月前
题目传送门
思路
题目大意
你需要买 个西瓜,每次可以买 个西瓜(),需要花费 个硬币,问在交易次数最少的前提下的最少花费是多少。
做法
由于是在交易次数最少的前提下,所以购买的方式也是唯一的。于是我们可以将 转化成三进制数,对于第 位的数字 ,需要 的花费。
tips:可以预处理 的幂。
AC Code:
CPP#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=30+5;
ll t[N]; //t[i]表示3的i次方
void solve()
{
int n;
cin >>n;
ll ans=0;
for(int i=18;i>=0;i--)
{
if(n>=t[i])
{
ll tmp=n/t[i];
n-=(tmp*t[i]);
ans=ans+(t[i+1] + i*t[i-1])*tmp; //*tmp 表示需要重复多少次这样的交易
}
}
cout <<ans<<'\n';
}
int main()
{
t[0]=1;
for(int i=1;i<=20;i++) t[i]=t[i-1]*3; //预处理3的i次方
int t;
cin >>t;
while(t--)
{
solve();
}
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...