• 940B Our Tanya is Crying Out Loud


    传送门

    题目大意

    给你n,k,A,B四个数,x=n,有两种操作:

      1.将x-1,需支付A个金币

      2.将x÷k,需支付B个金币,当且仅当k能整除x时可进行此操作

    问将x修改为1至少要花几个金币

    分析

    模拟两个过程,如果k能整除x则判断一个一个将x减到想x/k和将x除以k哪个花费的金币少,否则如果x大于k将x减去x模k的余数(不可每次减1,减若干次,否则会超时),x小于k则减去(x-1)。注意特判k等于1的情况。

    代码

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<cctype>
    #include<cmath>
    #include<cstdlib>
    #include<queue>
    #include<ctime>
    #include<vector>
    #include<set>
    #include<map>
    #include<stack>
    using namespace std;
    int main()
    {     long long n,m,i,j,k,x,a,b,ans=0;
          cin>>n>>k>>a>>b;
          x=n;
          if(k==1){
              cout<<(n-1)*a<<endl;
              return 0;
          }
          while(x!=1){
              if(x%k!=0){
                  if(x>k){
                    ans+=(x%k)*a;
                    x=x-x%k;
                  }else {
                  ans+=(x-1)*a;
                  x=1;
                }
              }else {
                  if((x-x/k)*a<b){
                      ans+=(x-x/k)*a;
                      x=x/k;
                  }else {
                      x=x/k;
                      ans+=b;
                  }
              }
          }
          cout<<ans<<endl;
          return 0;
    }

  • 相关阅读:
    Java 常提到的自然序(Natural Ordering)
    设计模式(三)行为模式
    设计模式(二)结构模式
    设计模式(一)建造者模式
    设计模式的概念以及面向对象设计原则
    Java源码 HashMap<K,V>
    mybatis注解使用
    spring整合mybatis
    数据库中的表批量映射为对象
    返回用户提交的图像工具类
  • 原文地址:https://www.cnblogs.com/yzxverygood/p/8470119.html
Copyright © 2020-2023  润新知