52302023-04-23 10:08:54anonHázszámokcpp17Hibás válasz 25/1003ms5068 KiB
#include <cmath>
#include <vector>
#include <algorithm>
#include <iostream>

using ll = long long;
using namespace std;

ll my_pow(ll bs, ll pw)
{
    ll i, r;

    r = 1;

    for(i = 0; i < pw; i++)
        r *= bs;

    return r;
}

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

    ec = 0;
    c = 0;
    p = false;

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

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

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

                        cc += MAXD - i - 1;
                    }

                    if(p)
                        cc += my_pow(bs, MAXD - i - 1) - 1;
                }
            }

            cc += ec * my_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] * my_pow(bs, MAXD - i - 1);

    return r;
}

ll lim(ll count, ll num, ll bs)
{
    ll MAXD = log(1e15) / 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) * my_pow(bs, MAXD - i - 2));

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

            cc += ((ll) (d[i] + 1 == num)) + ec * my_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] * my_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
1Elfogadva3ms1816 KiB
2Elfogadva3ms2056 KiB
3Elfogadva3ms2212 KiB
subtask20/25
4Elfogadva3ms2428 KiB
5Hibás válasz2ms2512 KiB
6Elfogadva2ms2512 KiB
7Elfogadva2ms2640 KiB
8Elfogadva3ms2648 KiB
9Elfogadva3ms2900 KiB
10Hibás válasz3ms2808 KiB
11Elfogadva3ms2936 KiB
12Elfogadva3ms3148 KiB
13Elfogadva3ms3260 KiB
14Elfogadva3ms3264 KiB
15Hibás válasz2ms3380 KiB
16Elfogadva3ms3620 KiB
17Elfogadva2ms3508 KiB
18Elfogadva3ms3476 KiB
19Hibás válasz3ms3724 KiB
subtask310/10
20Elfogadva3ms3572 KiB
21Elfogadva3ms3576 KiB
22Elfogadva3ms3700 KiB
23Elfogadva3ms3916 KiB
24Elfogadva3ms3992 KiB
subtask415/15
25Elfogadva3ms4124 KiB
26Elfogadva3ms4336 KiB
27Elfogadva2ms4420 KiB
28Elfogadva3ms4428 KiB
29Elfogadva3ms4560 KiB
30Elfogadva2ms4628 KiB
31Elfogadva2ms4632 KiB
32Elfogadva2ms4628 KiB
33Elfogadva3ms4752 KiB
subtask50/20
34Elfogadva3ms4752 KiB
35Elfogadva2ms4632 KiB
36Hibás válasz3ms4656 KiB
37Hibás válasz3ms4636 KiB
38Elfogadva3ms4660 KiB
39Elfogadva2ms4732 KiB
40Elfogadva2ms4740 KiB
41Elfogadva3ms4756 KiB
42Elfogadva3ms4856 KiB
subtask60/30
43Hibás válasz3ms4948 KiB
44Hibás válasz3ms5052 KiB
45Hibás válasz3ms4940 KiB
46Elfogadva3ms5056 KiB
47Elfogadva3ms4940 KiB
48Hibás válasz3ms4944 KiB
49Elfogadva2ms4940 KiB
50Elfogadva3ms4944 KiB
51Elfogadva2ms4944 KiB
52Elfogadva2ms4944 KiB
53Elfogadva3ms4940 KiB
54Elfogadva2ms4944 KiB
55Elfogadva3ms4968 KiB
56Elfogadva2ms5052 KiB
57Elfogadva2ms4948 KiB
58Elfogadva2ms4980 KiB
59Elfogadva2ms4956 KiB
60Hibás válasz2ms5068 KiB