5231 2023. 04. 23 10:12:06 anon Házszámok cpp17 Hibás válasz 25/100 3ms 5128 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 Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 3ms 1812 KiB
2 Elfogadva 3ms 2052 KiB
3 Elfogadva 2ms 2088 KiB
subtask2 0/25
4 Elfogadva 3ms 2216 KiB
5 Hibás válasz 2ms 2576 KiB
6 Elfogadva 3ms 2736 KiB
7 Elfogadva 2ms 2816 KiB
8 Elfogadva 3ms 2952 KiB
9 Elfogadva 3ms 3088 KiB
10 Hibás válasz 2ms 3172 KiB
11 Elfogadva 2ms 3108 KiB
12 Elfogadva 3ms 3248 KiB
13 Elfogadva 3ms 3368 KiB
14 Elfogadva 2ms 3344 KiB
15 Hibás válasz 3ms 3312 KiB
16 Elfogadva 3ms 3320 KiB
17 Elfogadva 3ms 3556 KiB
18 Elfogadva 2ms 3636 KiB
19 Hibás válasz 3ms 3776 KiB
subtask3 10/10
20 Elfogadva 3ms 3860 KiB
21 Elfogadva 3ms 3992 KiB
22 Elfogadva 3ms 4124 KiB
23 Elfogadva 3ms 4216 KiB
24 Elfogadva 3ms 4308 KiB
subtask4 15/15
25 Elfogadva 3ms 4824 KiB
26 Elfogadva 2ms 4536 KiB
27 Elfogadva 2ms 4780 KiB
28 Elfogadva 3ms 4668 KiB
29 Elfogadva 3ms 4668 KiB
30 Elfogadva 3ms 4796 KiB
31 Elfogadva 2ms 4880 KiB
32 Elfogadva 2ms 4760 KiB
33 Elfogadva 2ms 4884 KiB
subtask5 0/20
34 Elfogadva 3ms 4880 KiB
35 Elfogadva 2ms 4884 KiB
36 Hibás válasz 3ms 4880 KiB
37 Hibás válasz 2ms 4884 KiB
38 Elfogadva 3ms 5128 KiB
39 Elfogadva 3ms 5104 KiB
40 Elfogadva 3ms 4964 KiB
41 Elfogadva 3ms 5092 KiB
42 Elfogadva 3ms 4972 KiB
subtask6 0/30
43 Hibás válasz 3ms 4972 KiB
44 Hibás válasz 2ms 5080 KiB
45 Hibás válasz 3ms 4968 KiB
46 Elfogadva 3ms 4968 KiB
47 Elfogadva 3ms 4964 KiB
48 Hibás válasz 3ms 4968 KiB
49 Elfogadva 3ms 4968 KiB
50 Elfogadva 3ms 4968 KiB
51 Elfogadva 3ms 5084 KiB
52 Elfogadva 3ms 4972 KiB
53 Elfogadva 2ms 4968 KiB
54 Elfogadva 3ms 4996 KiB
55 Elfogadva 3ms 4968 KiB
56 Elfogadva 3ms 4964 KiB
57 Elfogadva 3ms 4968 KiB
58 Elfogadva 3ms 4964 KiB
59 Hibás válasz 3ms 4968 KiB
60 Hibás válasz 3ms 4964 KiB