52292023-04-23 10:06:34anonHázszámokcpp17Hibás válasz 0/1003ms3956 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(1e20) / 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
2Elfogadva3ms2052 KiB
3Elfogadva3ms2540 KiB
subtask20/25
4Hibás válasz3ms2664 KiB
5Hibás válasz3ms2664 KiB
6Hibás válasz3ms2708 KiB
7Hibás válasz3ms2680 KiB
8Elfogadva3ms2808 KiB
9Elfogadva3ms3048 KiB
10Hibás válasz3ms3104 KiB
11Hibás válasz2ms3108 KiB
12Hibás válasz3ms3108 KiB
13Elfogadva3ms3232 KiB
14Elfogadva3ms3508 KiB
15Hibás válasz3ms3448 KiB
16Elfogadva3ms3572 KiB
17Elfogadva3ms3640 KiB
18Elfogadva3ms3524 KiB
19Hibás válasz3ms3460 KiB
subtask30/10
20Hibás válasz3ms3580 KiB
21Hibás válasz3ms3604 KiB
22Hibás válasz3ms3460 KiB
23Elfogadva3ms3488 KiB
24Hibás válasz3ms3472 KiB
subtask40/15
25Hibás válasz3ms3468 KiB
26Hibás válasz3ms3584 KiB
27Hibás válasz2ms3464 KiB
28Elfogadva3ms3584 KiB
29Elfogadva3ms3456 KiB
30Elfogadva3ms3580 KiB
31Elfogadva3ms3456 KiB
32Elfogadva3ms3460 KiB
33Elfogadva3ms3464 KiB
subtask50/20
34Elfogadva2ms3472 KiB
35Elfogadva3ms3584 KiB
36Hibás válasz3ms3708 KiB
37Hibás válasz3ms3908 KiB
38Elfogadva3ms3920 KiB
39Elfogadva3ms3808 KiB
40Elfogadva3ms3808 KiB
41Elfogadva3ms3808 KiB
42Elfogadva3ms3804 KiB
subtask60/30
43Hibás válasz3ms3956 KiB
44Hibás válasz3ms3804 KiB
45Hibás válasz3ms3932 KiB
46Elfogadva3ms3808 KiB
47Elfogadva3ms3804 KiB
48Hibás válasz3ms3804 KiB
49Elfogadva3ms3812 KiB
50Elfogadva3ms3804 KiB
51Elfogadva3ms3932 KiB
52Hibás válasz3ms3808 KiB
53Hibás válasz3ms3808 KiB
54Hibás válasz3ms3804 KiB
55Elfogadva3ms3808 KiB
56Elfogadva3ms3836 KiB
57Elfogadva3ms3812 KiB
58Elfogadva3ms3808 KiB
59Elfogadva3ms3808 KiB
60Hibás válasz3ms3808 KiB