首页 > 其他 > 详细

940B Our Tanya is Crying Out Loud

时间:2018-02-25 19:58:27      阅读:223      评论:0      收藏:0      [点我收藏+]

传送门

题目大意

给你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;
}

940B Our Tanya is Crying Out Loud

原文:https://www.cnblogs.com/yzxverygood/p/8470119.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!