結果
| 問題 | 
                            No.1862 Copy and Paste
                             | 
                    
| コンテスト | |
| ユーザー | 
                             vjudge1
                         | 
                    
| 提出日時 | 2024-11-13 22:01:33 | 
| 言語 | C++14  (gcc 13.3.0 + boost 1.87.0)  | 
                    
| 結果 | 
                             
                                WA
                                 
                             
                            
                         | 
                    
| 実行時間 | - | 
| コード長 | 1,280 bytes | 
| コンパイル時間 | 689 ms | 
| コンパイル使用メモリ | 73,100 KB | 
| 実行使用メモリ | 6,824 KB | 
| 最終ジャッジ日時 | 2024-11-13 22:01:35 | 
| 合計ジャッジ時間 | 1,776 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge1 / judge5 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 WA * 1 | 
| other | AC * 15 WA * 12 | 
ソースコード
#include <iostream>
#include <cstdint>
#include <algorithm>
#include <cmath>
using namespace std;
const int MAXN = 1e5 + 10; // 55pts
const int64_t INF = 1e18;
int64_t f[MAXN];
int k_v[MAXN];
int64_t fstpow(int a, int k)
{
    if (k == 0)
        return 1;
    if (k == 1)
        return a;
    int64_t tmp = fstpow(a, k / 2);
    if (tmp < 0)
        return -1;
    if (k % 2 == 0)
        return tmp * tmp;
    else
        return tmp * tmp * a;
}
int64_t rpow(int64_t a, int64_t k)
{
    int64_t l = 1, r = a;
    while (l < r)
    {
        int64_t mid = (l + r) / 2;
        int64_t t = fstpow(mid, k);
        if (t < a && t > 0)
            l = mid + 1;
        else
            r = mid;
    }
    return l;
}
int main()
{
    // freopen("dice.in", "r", stdin);
    // freopen("dice.out", "w", stdout);
    int64_t n, x, y;
    // cin >> n >> x >> y;
    int64_t ans = INF;
    cin >> x >> y >> n;
    n -= 1;
    for (int64_t i = 1; (1ll << i) < n * 2; ++i)
    {
        int64_t v = rpow(n, i);
        int64_t lst = fstpow(v, i - 1);
        int64_t now = i * x + (i - 1) * y * (v - 1) + ((int64_t)floor((double)n / lst)) * y;
        cerr << "dbg: " << i << " " << v << " " << now << "\n";
        ans = min(ans, now);
    }
    cout << ans << "\n";
    return 0;
}
            
            
            
        
            
vjudge1