专栏文章

P14027 加训加训 题解

P14027题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minw7epf
此快照首次捕获于
2025/12/02 09:21
3 个月前
此快照最后确认于
2025/12/02 09:21
3 个月前
查看原文

题目大意

给你两个非负整数 a,ba,b 与一个正整数 kk
每次操作你可以将 aa 加上 kk 或者乘以 kk
问最少几次操作后得到 bab \le a

思路

考虑贪心。
首先由于 aabb 都是非负整数,kk 为正整数,显然正常情况a×ka \times ka+ka+k 是更优的。
于是一直乘到 bab \le a,输出次数就行了。
接下来考虑特殊情况:
  1. k=1k=1
    任何数乘一都为它本身,所以这时只能一步一步加上去了。
  2. a=1a=1a=0a=0
    显然这两种情况都只能加不能乘。

代码

CPP
#include <bits/stdc++.h>
using namespace std;
int a,b,k,ans;
int main()
{
    cin>>a>>b>>k;
    while(a<b)
    {
        if(a==1||a==0||k==1) //特判
        {
            a+=k;
            ans++;
        }
        else
        {
            a*=k;
            ans++;
        }
    }
    cout<<ans<<endl;
    return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...