52322023-04-23 15:23:49anonHázszámokcpp17Elfogadva 100/1003ms5300 KiB
#include <cmath>
#include <vector>
#include <algorithm>
#include <iostream>

using ll = long long;
using namespace std;

ll lim(ll count, ll num, ll bs)
{
    ll MAXD = log(1e13) / log(bs);
    ll i, c, cc, ec, r, d[MAXD];

    c = ec = 0;

    for(i = 0; i < MAXD; i++)
    {
        cc = c;
        d[i] = 0;

        while(true)
        {
            if(i < MAXD - 1)
            {
                cc += ((MAXD - i - 1) * pow(bs, MAXD - i - 2));

                if(d[i] == num)
                    cc += pow(bs, MAXD - i - 1) - 1;
            }

            cc += ((ll) (d[i] + 1 == num)) + ec * pow(bs, MAXD - i - 1);

            if(d[i] < (bs - 1) && cc <= count)
            {
                c = cc;
                d[i]++;
            }
            else
                break;
        }

        ec += ((ll) (d[i] == num));
    }

    r = 0;

    for(i = 0; i < MAXD; i++)
        r += d[i] * pow(bs, MAXD - i - 1);

    return r;
}

ll lim0(ll count, ll bs)
{
    ll MAXD = log(1e13) / log(bs);
    ll i, j, c, cc, ec, r, d[MAXD];
    bool p;

    c = ec = 0;
    p = false;

    for(i = 0; i < MAXD; i++)
    {
        cc = c;
        d[i] = 0;

        while(true)
        {
            if(i < MAXD - 1)
            {
                if(!d[i] && !p)
                {
                    if(i == MAXD - 2)
                        cc++;
                    else
                    {
                        cc += ((MAXD - i - 2) * pow(bs, MAXD - i - 2));

                        for(j = 0; j < MAXD - i - 2; j++)
                            cc -= pow(bs, j);

                        cc += MAXD - i - 1;
                    }
                }
                else
                    cc += ((MAXD - i - 1) * pow(bs, MAXD - i - 2));

                if(!d[i] && p)
                    cc += pow(bs, MAXD - i - 1) - 1;
            }

            cc += ec * pow(bs, MAXD - i - 1);

            if(d[i] < (bs - 1) && cc <= count)
            {
                c = cc;
                d[i]++;
            }
            else
                break;
        }

        if(d[i])
            p = true;
        else if(p)
            ec++;
    }

    r = 0;

    for(i = 0; i < MAXD; i++)
        r += d[i] * pow(bs, MAXD - i - 1);

    return r;
}

int main()
{
    ll i, ans, K;

    cin >> K;

    vector<ll> d(K);

    for(i = 0; i < K; i++)
        cin >> d[i];

    ans = lim0(d[0], K);

    for(i = 1; i < K; i++)
        ans = min(lim(d[i], i, K), ans);

    cout << ans << endl;

    return 0;
}

RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1808 KiB
2Elfogadva3ms2064 KiB
3Elfogadva3ms2276 KiB
subtask225/25
4Elfogadva3ms2488 KiB
5Elfogadva3ms2724 KiB
6Elfogadva2ms2804 KiB
7Elfogadva3ms2808 KiB
8Elfogadva3ms2768 KiB
9Elfogadva3ms2968 KiB
10Elfogadva3ms3180 KiB
11Elfogadva3ms3296 KiB
12Elfogadva2ms3376 KiB
13Elfogadva2ms3532 KiB
14Elfogadva3ms3628 KiB
15Elfogadva3ms3628 KiB
16Elfogadva2ms3708 KiB
17Elfogadva3ms3840 KiB
18Elfogadva3ms3932 KiB
19Elfogadva2ms4020 KiB
subtask310/10
20Elfogadva3ms4148 KiB
21Elfogadva3ms4388 KiB
22Elfogadva2ms4476 KiB
23Elfogadva2ms4368 KiB
24Elfogadva2ms4368 KiB
subtask415/15
25Elfogadva3ms4368 KiB
26Elfogadva3ms4608 KiB
27Elfogadva2ms4688 KiB
28Elfogadva2ms4700 KiB
29Elfogadva2ms4788 KiB
30Elfogadva2ms4812 KiB
31Elfogadva2ms4784 KiB
32Elfogadva3ms4888 KiB
33Elfogadva2ms4768 KiB
subtask520/20
34Elfogadva2ms4884 KiB
35Elfogadva2ms4912 KiB
36Elfogadva2ms4772 KiB
37Elfogadva2ms4880 KiB
38Elfogadva3ms4892 KiB
39Elfogadva3ms4968 KiB
40Elfogadva3ms4964 KiB
41Elfogadva3ms4968 KiB
42Elfogadva2ms4968 KiB
subtask630/30
43Elfogadva3ms4964 KiB
44Elfogadva2ms4968 KiB
45Elfogadva3ms5124 KiB
46Elfogadva3ms5128 KiB
47Elfogadva3ms5292 KiB
48Elfogadva2ms5176 KiB
49Elfogadva3ms5300 KiB
50Elfogadva3ms5184 KiB
51Elfogadva3ms5208 KiB
52Elfogadva3ms5184 KiB
53Elfogadva2ms5180 KiB
54Elfogadva2ms5180 KiB
55Elfogadva3ms5176 KiB
56Elfogadva3ms5176 KiB
57Elfogadva3ms5180 KiB
58Elfogadva2ms5184 KiB
59Elfogadva3ms5180 KiB
60Elfogadva3ms5180 KiB