53072023-04-25 18:58:04anonMágikus sorozatcpp17Elfogadva 100/100156ms81884 KiB
#include <vector>
#include <unordered_set>
#include <iostream>

using ll = long long;
using namespace std;

int main()
{
    ll i, j, k, N;

    cin >> N;

    vector<ll> z(N + 1);

    for(i = 1; i <= N; i++)
        cin >> z[i];

    vector<ll> a(N + 1);
    a[1] = 1;

    vector<unordered_set<ll>> bads(N + 2);

    i = 2;

    while(i <= N)
    {
        if(z[i])
        {
            j = i;
            k = i + z[i];

            for(;i < k && (i == j || !z[i]); i++)
                a[i] = a[i - j + 1];

            if(a[k - j + 1] > 1)
                bads[k].insert(a[k - j + 1]);
        }
        else
        {
            a[i] = 2;

            while(bads[i].find(a[i]) != bads[i].end())
                a[i]++;

            i++;
        }
    }

    for(i = 1; i <= N; i++)
        cout << a[i] << ' ';

    cout << endl;

    return 0;
}

RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1808 KiB
2Elfogadva7ms3356 KiB
subtask215/15
3Elfogadva4ms2684 KiB
4Elfogadva4ms3140 KiB
5Elfogadva4ms3428 KiB
subtask315/15
6Elfogadva3ms2728 KiB
7Elfogadva3ms2936 KiB
8Elfogadva3ms3144 KiB
9Elfogadva3ms3356 KiB
10Elfogadva3ms3568 KiB
subtask430/30
11Elfogadva4ms3876 KiB
12Elfogadva4ms4024 KiB
13Elfogadva4ms4336 KiB
14Elfogadva3ms4304 KiB
subtask540/40
15Elfogadva115ms49028 KiB
16Elfogadva112ms49216 KiB
17Elfogadva125ms62532 KiB
18Elfogadva153ms81884 KiB
19Elfogadva150ms78216 KiB
20Elfogadva144ms65864 KiB
21Elfogadva137ms52692 KiB
22Elfogadva136ms49696 KiB
23Elfogadva134ms50744 KiB
24Elfogadva116ms51664 KiB
25Elfogadva123ms51792 KiB
26Elfogadva128ms52080 KiB
27Elfogadva128ms63732 KiB
28Elfogadva119ms55112 KiB
29Elfogadva112ms51044 KiB
30Elfogadva156ms46828 KiB
31Elfogadva134ms46828 KiB
32Elfogadva115ms46824 KiB