zoukankan      html  css  js  c++  java
  • 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;
    }

  • 相关阅读:
    实验一 总结
    C#中将JObject类型数据转换成这样的货币数字-带千分符-四舍五入2位小数
    Git常用命令+报错solution
    Python Requests学习笔记
    Python requests 环境搭建
    关于Page Object个人结合测试框架的一些理解
    REST理解 + API测试学习笔记
    记录组内做API测试的流程
    理解c#的Get Set访问器及测试脚本中的应用
    tp3
  • 原文地址:https://www.cnblogs.com/yzxverygood/p/8470119.html
Copyright © 2011-2022 走看看