52282023-04-23 09:27:13anonHázszámokcpp17Hibás válasz 25/1003ms5016 KiB
#include <cmath>
#include <vector>
#include <algorithm>
#include <iostream>

using ll = long long;
using namespace std;

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) * pow(bs, MAXD - i - 2));
                else
                {
                    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;
                    }

                    if(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;
}

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) * 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;
}

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
2Elfogadva3ms2008 KiB
3Elfogadva3ms2248 KiB
subtask20/25
4Elfogadva3ms2468 KiB
5Hibás válasz3ms2744 KiB
6Elfogadva3ms2656 KiB
7Elfogadva3ms2660 KiB
8Elfogadva3ms2788 KiB
9Elfogadva3ms2996 KiB
10Hibás válasz3ms3084 KiB
11Elfogadva3ms3328 KiB
12Elfogadva3ms3452 KiB
13Elfogadva3ms3596 KiB
14Elfogadva3ms3856 KiB
15Hibás válasz3ms3712 KiB
16Elfogadva3ms3968 KiB
17Elfogadva3ms4144 KiB
18Elfogadva2ms4164 KiB
19Hibás válasz2ms4312 KiB
subtask310/10
20Elfogadva3ms4476 KiB
21Elfogadva2ms4448 KiB
22Elfogadva2ms4452 KiB
23Elfogadva2ms4452 KiB
24Elfogadva3ms4572 KiB
subtask415/15
25Elfogadva3ms4568 KiB
26Elfogadva3ms4840 KiB
27Elfogadva2ms4780 KiB
28Elfogadva3ms4772 KiB
29Elfogadva3ms4776 KiB
30Elfogadva2ms4888 KiB
31Elfogadva2ms4892 KiB
32Elfogadva3ms4784 KiB
33Elfogadva2ms4788 KiB
subtask50/20
34Elfogadva3ms4784 KiB
35Elfogadva3ms4796 KiB
36Hibás válasz3ms4900 KiB
37Hibás válasz3ms4676 KiB
38Elfogadva3ms4696 KiB
39Elfogadva2ms4776 KiB
40Elfogadva2ms4776 KiB
41Elfogadva2ms4780 KiB
42Elfogadva2ms4780 KiB
subtask60/30
43Hibás válasz3ms4668 KiB
44Hibás válasz3ms4672 KiB
45Hibás válasz2ms4784 KiB
46Elfogadva2ms4784 KiB
47Elfogadva2ms4676 KiB
48Hibás válasz3ms4696 KiB
49Elfogadva3ms4668 KiB
50Elfogadva3ms4808 KiB
51Elfogadva2ms4888 KiB
52Elfogadva2ms4908 KiB
53Elfogadva2ms4904 KiB
54Elfogadva3ms4900 KiB
55Elfogadva3ms4932 KiB
56Elfogadva3ms4904 KiB
57Elfogadva3ms4908 KiB
58Elfogadva3ms4904 KiB
59Elfogadva3ms4908 KiB
60Hibás válasz3ms5016 KiB