Our Tanya is Crying Out Loud

Posted dealer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Our Tanya is Crying Out Loud相关的知识,希望对你有一定的参考价值。

Right now she actually isn‘t. But she will be, if you don‘t solve this problem.

You are given integers nkA and B. There is a number x, which is initially equal to n. You are allowed to perform two types of operations:

  1. Subtract 1 from x. This operation costs you A coins.
  2. Divide x by k. Can be performed only if x is divisible by k. This operation costs you B coins.
What is the minimum amount of coins you have to pay to make x equal to 1?
Input

The first line contains a single integer n (1 ≤ n ≤ 2·109).

The second line contains a single integer k (1 ≤ k ≤ 2·109).

The third line contains a single integer A (1 ≤ A ≤ 2·109).

The fourth line contains a single integer B (1 ≤ B ≤ 2·109).

Output

Output a single integer — the minimum amount of coins you have to pay to make x equal to 1.

Examples
input
Copy
9
2
3
1
output
Copy
6
input
Copy
5
5
2
20
output
Copy
8
input
Copy
19
3
4
2
output
Copy
12
Note

In the first testcase, the optimal strategy is as follows:

  • Subtract 1 from x (9 → 8) paying 3 coins.
  • Divide x by 2 (8 → 4) paying 1 coin.
  • Divide x by 2 (4 → 2) paying 1 coin.
  • Divide x by 2 (2 → 1) paying 1 coin.

The total cost is 6 coins.

In the second test case the optimal strategy is to subtract 1 from x 4 times paying 8 coins in total.

 

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <set>
#include <queue>
#include <map>
#include <sstream>
#include <cstdio>
#include <cstring>
#include <numeric>
#include <cmath>
#include <unordered_set>
#include <unordered_map>
//#include <xfunctional>
#define ll long long
#define mod 1000000007
using namespace std;
int dir[4][2] = { { 0,1 },{ 0,-1 },{ -1,0 },{ 1,0 } };
const long long INF = 0x7f7f7f7f7f7f7f7f;
const int inf = 0x3f3f3f3f;

int main()
{
    ll n, k, A, B;
    ll res=0;
    cin >> n >> k >> A >> B;
    if (k == 1)
        cout << (n - 1)*A;
    else
    {
        while (n != 1)
        {
            if (n < k)
            {
                res += (n - 1)*A;
                n = 1;
            }
            else
            {
                if (n%k > 0)
                {
                    res += (n%k)*A;
                    n -= n%k;
                }
                if ((n - n / k)*A > B)
                {
                    res += B;
                    n /= k;
                }
                else
                {
                    res += (n - n / k)*A;
                    n /= k;
                }
            }
        }
        cout << res;
    }
    return 0;
}

 

以上是关于Our Tanya is Crying Out Loud的主要内容,如果未能解决你的问题,请参考以下文章

大数据学习总结what is our foucus

Where we love is home, home that our feet may leave, but not our hearts.

Check out our list of adidas NMD Singapore retailers

Error: Another program is already listening on a port that one of our HTTP servers is configured to

supervisord 启动失败 Error: Another program is already listening on a port that one of our HTTP serve...

Our happy ending