52312023-04-23 10:12:06anonHázszámokcpp17Hibás válasz 25/1003ms5128 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(1e12) / 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(1e12) / 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
1Elfogadva3ms1812 KiB
2Elfogadva3ms2052 KiB
3Elfogadva2ms2088 KiB
subtask20/25
4Elfogadva3ms2216 KiB
5Hibás válasz2ms2576 KiB
6Elfogadva3ms2736 KiB
7Elfogadva2ms2816 KiB
8Elfogadva3ms2952 KiB
9Elfogadva3ms3088 KiB
10Hibás válasz2ms3172 KiB
11Elfogadva2ms3108 KiB
12Elfogadva3ms3248 KiB
13Elfogadva3ms3368 KiB
14Elfogadva2ms3344 KiB
15Hibás válasz3ms3312 KiB
16Elfogadva3ms3320 KiB
17Elfogadva3ms3556 KiB
18Elfogadva2ms3636 KiB
19Hibás válasz3ms3776 KiB
subtask310/10
20Elfogadva3ms3860 KiB
21Elfogadva3ms3992 KiB
22Elfogadva3ms4124 KiB
23Elfogadva3ms4216 KiB
24Elfogadva3ms4308 KiB
subtask415/15
25Elfogadva3ms4824 KiB
26Elfogadva2ms4536 KiB
27Elfogadva2ms4780 KiB
28Elfogadva3ms4668 KiB
29Elfogadva3ms4668 KiB
30Elfogadva3ms4796 KiB
31Elfogadva2ms4880 KiB
32Elfogadva2ms4760 KiB
33Elfogadva2ms4884 KiB
subtask50/20
34Elfogadva3ms4880 KiB
35Elfogadva2ms4884 KiB
36Hibás válasz3ms4880 KiB
37Hibás válasz2ms4884 KiB
38Elfogadva3ms5128 KiB
39Elfogadva3ms5104 KiB
40Elfogadva3ms4964 KiB
41Elfogadva3ms5092 KiB
42Elfogadva3ms4972 KiB
subtask60/30
43Hibás válasz3ms4972 KiB
44Hibás válasz2ms5080 KiB
45Hibás válasz3ms4968 KiB
46Elfogadva3ms4968 KiB
47Elfogadva3ms4964 KiB
48Hibás válasz3ms4968 KiB
49Elfogadva3ms4968 KiB
50Elfogadva3ms4968 KiB
51Elfogadva3ms5084 KiB
52Elfogadva3ms4972 KiB
53Elfogadva2ms4968 KiB
54Elfogadva3ms4996 KiB
55Elfogadva3ms4968 KiB
56Elfogadva3ms4964 KiB
57Elfogadva3ms4968 KiB
58Elfogadva3ms4964 KiB
59Hibás válasz3ms4968 KiB
60Hibás válasz3ms4964 KiB