Submission details
Task:Merkkijonot
Sender:Metabolix
Submission time:2025-11-13 19:23:19 +0200
Language:C++ (C++20)
Status:READY
Result:18
Feedback
groupverdictscore
#1ACCEPTED18
#20
#30
#40
#50
Test results
testverdicttimegroup
#1ACCEPTED0.00 s1, 2, 3, 4, 5details
#2ACCEPTED0.01 s2, 3, 4, 5details
#3ACCEPTED0.00 s1, 2, 3, 4, 5details
#4ACCEPTED0.00 s1, 2, 3, 4, 5details
#5ACCEPTED0.00 s1, 2, 3, 4, 5details
#6ACCEPTED0.00 s1, 2, 3, 4, 5details
#7ACCEPTED0.01 s1, 2, 3, 4, 5details
#8ACCEPTED0.00 s1, 2, 3, 4, 5details
#9ACCEPTED0.01 s1, 2, 3, 4, 5details
#10ACCEPTED0.00 s1, 2, 3, 4, 5details
#11ACCEPTED0.00 s2, 3, 4, 5details
#12ACCEPTED0.01 s2, 3, 4, 5details
#13ACCEPTED0.03 s2, 3, 4, 5details
#14ACCEPTED0.03 s2, 3, 4, 5details
#15ACCEPTED0.00 s2, 3, 4, 5details
#16ACCEPTED0.01 s2, 3, 4, 5details
#170.01 s2, 3, 4, 5details
#18ACCEPTED0.01 s2, 3, 4, 5details
#19ACCEPTED0.00 s3, 4, 5details
#200.06 s3, 4, 5details
#210.08 s3, 4, 5details
#220.07 s3, 4, 5details
#23ACCEPTED0.00 s3, 4, 5details
#240.10 s3, 4, 5details
#250.01 s3, 4, 5details
#260.02 s3, 4, 5details
#27ACCEPTED0.00 s4, 5details
#280.10 s4, 5details
#290.33 s4, 5details
#300.23 s4, 5details
#31ACCEPTED0.00 s4, 5details
#320.37 s4, 5details
#330.03 s4, 5details
#340.07 s4, 5details
#35ACCEPTED0.00 s5details
#360.18 s5details
#370.47 s5details
#380.39 s5details
#39ACCEPTED0.00 s5details
#400.64 s5details
#410.04 s5details
#420.11 s5details

Code

#include <bits/stdc++.h>

using namespace std;

const long MOD = 1'000'000'007;

int n, m;
string s;

typedef unordered_map<uint64_t, uint64_t> määrät_t;
typedef unordered_map<uint64_t, määrät_t> kaaret_t;
kaaret_t kaaret;

void luo_kaaret(uint64_t tila) {
    if (kaaret.count(tila)) {
        return;
    }
    for (char c = 'a'; c <= 'z'; ++c) {
        uint64_t uusi_tila = 0;
        if ((s[0] == c)) {
            uusi_tila |= (1ULL << 0);
        }
        for (int i = 0; i < m-1; ++i) {
            if (((tila >> i) & 1) && s[i + 1] == c) {
                uusi_tila |= (1ULL << (i + 1));
            }
        }
        if ((tila >> (m-1)) & 1) {
            for (int i = 0; i < m; ++i) {
                if (s[i] == c) {
                    uusi_tila |= (1ULL << i);
                }
            }
        }
        if (uusi_tila) {
            kaaret[tila][uusi_tila] += 1;
            if (kaaret[tila][uusi_tila] > 1) {
                cerr << "varoitus: moninkertainen kaari tilasta " << tila << " tilaan " << uusi_tila << "\n";
            }
            luo_kaaret(uusi_tila);
        }
    }
}

int main() {
    cin >> n >> m;
    cin >> s;

    luo_kaaret(1ULL << 0);

    määrät_t tulos;
    tulos[1ULL << 0] = 1;
    n -= 1; // lähtömerkki on jo asetettu

    while (n) {
        // Jos tämä bitti kuuluu summaan, edetään näitä kaaria
        if (n & 1) {
            n -= 1;
            määrät_t seuraava;
            for (auto& [tila0, määrä0] : tulos) {
                for (auto& [tila1, määrä01] : kaaret[tila0]) {
                    seuraava[tila1] += määrä0 * määrä01 % MOD;
                }
            }
            tulos = move(seuraava);
        }
        // Kerrotaan kaaren pituus kahdella
        if (n) {
            n >>= 1;
            kaaret_t kaksoiskaaret;
            for (auto& [tila0, mappi] : kaaret) {
                for (auto& [tila1, määrä01] : mappi) {
                    for (auto& [tila2, määrä12] : kaaret[tila1]) {
                        kaksoiskaaret[tila0][tila2] += määrä01 * määrä12 % MOD;
                    }
                }
            }
            kaaret = move(kaksoiskaaret);
        }
    }

    // Voittotilat ovat ne, joissa leima päättyy
    long vastaus = 0;
    for (auto& [tila, määrä] : tulos) {
        if (tila & (1ULL << (m - 1))) {
            vastaus += määrä;
            if (vastaus > MOD) {
                vastaus %= MOD;
            }
        }
    }
    cout << vastaus << "\n";
    return 0;
}

Test details

Test 1

Group: 1, 2, 3, 4, 5

Verdict: ACCEPTED

input
1 1
a

correct output
1

user output
1

Test 2

Group: 2, 3, 4, 5

Verdict: ACCEPTED

input
20 20
ssxfykmuzljmwgyvldnu

correct output
1

user output
1

Test 3

Group: 1, 2, 3, 4, 5

Verdict: ACCEPTED

input
20 10
aaaaaaaaaa

correct output
1

user output
1

Test 4

Group: 1, 2, 3, 4, 5

Verdict: ACCEPTED

input
20 10
aabbbaaaab

correct output
1532

user output
1532

Test 5

Group: 1, 2, 3, 4, 5

Verdict: ACCEPTED

input
20 10
aabbacbdca

correct output
1542

user output
1542

Test 6

Group: 1, 2, 3, 4, 5

Verdict: ACCEPTED

input
20 10
ztknszhrby

correct output
3261

user output
3261

Test 7

Group: 1, 2, 3, 4, 5

Verdict: ACCEPTED

input
20 1
a

correct output
1

user output
1

Test 8

Group: 1, 2, 3, 4, 5

Verdict: ACCEPTED

input
20 10
aabbbbbbba

correct output
1689

user output
1689

Test 9

Group: 1, 2, 3, 4, 5

Verdict: ACCEPTED

input
20 8
abxabyab

correct output
8619

user output
8619

Test 10

Group: 1, 2, 3, 4, 5

Verdict: ACCEPTED

input
20 10
ababababab

correct output
509

user output
509

Test 11

Group: 2, 3, 4, 5

Verdict: ACCEPTED

input
100 50
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

correct output
1

user output
1

Test 12

Group: 2, 3, 4, 5

Verdict: ACCEPTED

input
100 50
bbaaabbbbbabbbbabababababbbaab...

correct output
511493117

user output
511493117

Test 13

Group: 2, 3, 4, 5

Verdict: ACCEPTED

input
100 50
addabbbbbadddccadcabaacbbbaabd...

correct output
618572722

user output
618572722

Test 14

Group: 2, 3, 4, 5

Verdict: ACCEPTED

input
100 50
rrdumiqrjewanjplbyvkaytbcyzbyl...

correct output
35126431

user output
35126431

Test 15

Group: 2, 3, 4, 5

Verdict: ACCEPTED

input
100 1
a

correct output
1

user output
1

Test 16

Group: 2, 3, 4, 5

Verdict: ACCEPTED

input
100 50
aabbbbbbbbbbbbbbbbbbbbbbbbbbbb...

correct output
460606355

user output
460606355

Test 17

Group: 2, 3, 4, 5

Verdict:

input
100 23
aybabtuxaybabtuyaybabtu

correct output
342213037

user output
848149017

Feedback: Incorrect character on line 1 col 1: expected "342213037", got "848149017"

Test 18

Group: 2, 3, 4, 5

Verdict: ACCEPTED

input
100 50
ababababababababababababababab...

correct output
775006564

user output
775006564

Test 19

Group: 3, 4, 5

Verdict: ACCEPTED

input
1000 50
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

correct output
1

user output
1

Test 20

Group: 3, 4, 5

Verdict:

input
1000 50
bbabaabbabbbaaaaaaaaaababaabbb...

correct output
911592620

user output
901131764

Feedback: Incorrect character on line 1 col 2: expected "911592620", got "901131764"

Test 21

Group: 3, 4, 5

Verdict:

input
1000 50
cacabdddcbdadabdcbdddbdddbaccb...

correct output
12869296

user output
319392931

Feedback: Incorrect character on line 1 col 1: expected "12869296", got "319392931"

Test 22

Group: 3, 4, 5

Verdict:

input
1000 50
tqoyadbshyehwcwaxbtbsqtaswkyet...

correct output
741984969

user output
18249434

Feedback: Incorrect character on line 1 col 1: expected "741984969", got "18249434"

Test 23

Group: 3, 4, 5

Verdict: ACCEPTED

input
1000 1
a

correct output
1

user output
1

Test 24

Group: 3, 4, 5

Verdict:

input
1000 50
aabbbbbbbbbbbbbbbbbbbbbbbbbbbb...

correct output
599950419

user output
46180903

Feedback: Incorrect character on line 1 col 1: expected "599950419", got "46180903"

Test 25

Group: 3, 4, 5

Verdict:

input
1000 23
aybabtuxaybabtuyaybabtu

correct output
548809016

user output
232589115

Feedback: Incorrect character on line 1 col 1: expected "548809016", got "232589115"

Test 26

Group: 3, 4, 5

Verdict:

input
1000 50
ababababababababababababababab...

correct output
765799780

user output
835977393

Feedback: Incorrect character on line 1 col 1: expected "765799780", got "835977393"

Test 27

Group: 4, 5

Verdict: ACCEPTED

input
1000000 50
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

correct output
1

user output
1

Test 28

Group: 4, 5

Verdict:

input
1000000 50
bbaababbaaabbabababbaaaaaabbaa...

correct output
514073453

user output
848985749

Feedback: Incorrect character on line 1 col 1: expected "514073453", got "848985749"

Test 29

Group: 4, 5

Verdict:

input
1000000 50
aabccabbbbabccabcdcdadbcdccdac...

correct output
438094288

user output
206073258

Feedback: Incorrect character on line 1 col 1: expected "438094288", got "206073258"

Test 30

Group: 4, 5

Verdict:

input
1000000 50
yzfzimxrxfukhlkrtaylohyuqkupsn...

correct output
905445077

user output
294777605

Feedback: Incorrect character on line 1 col 1: expected "905445077", got "294777605"

Test 31

Group: 4, 5

Verdict: ACCEPTED

input
1000000 1
a

correct output
1

user output
1

Test 32

Group: 4, 5

Verdict:

input
1000000 50
aabbbbbbbbbbbbbbbbbbbbbbbbbbbb...

correct output
280596224

user output
261698934

Feedback: Incorrect character on line 1 col 2: expected "280596224", got "261698934"

Test 33

Group: 4, 5

Verdict:

input
1000000 23
aybabtuxaybabtuyaybabtu

correct output
268144314

user output
47983215

Feedback: Incorrect character on line 1 col 1: expected "268144314", got "47983215"

Test 34

Group: 4, 5

Verdict:

input
1000000 50
ababababababababababababababab...

correct output
655244665

user output
992664175

Feedback: Incorrect character on line 1 col 1: expected "655244665", got "992664175"

Test 35

Group: 5

Verdict: ACCEPTED

input
1000000000 50
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

correct output
1

user output
1

Test 36

Group: 5

Verdict:

input
1000000000 50
abbbaabbaaaaabbbbabbabbaaaaaba...

correct output
911059863

user output
171401495

Feedback: Incorrect character on line 1 col 1: expected "911059863", got "171401495"

Test 37

Group: 5

Verdict:

input
1000000000 50
cbabbcaadabbcabbdbdabbbcccbdca...

correct output
994268014

user output
891412694

Feedback: Incorrect character on line 1 col 1: expected "994268014", got "891412694"

Test 38

Group: 5

Verdict:

input
1000000000 50
pehyicejeninplaczwezhahmbhwfwi...

correct output
837165971

user output
434466033

Feedback: Incorrect character on line 1 col 1: expected "837165971", got "434466033"

Test 39

Group: 5

Verdict: ACCEPTED

input
1000000000 1
a

correct output
1

user output
1

Test 40

Group: 5

Verdict:

input
1000000000 50
aabbbbbbbbbbbbbbbbbbbbbbbbbbbb...

correct output
114333489

user output
397166116

Feedback: Incorrect character on line 1 col 1: expected "114333489", got "397166116"

Test 41

Group: 5

Verdict:

input
1000000000 23
aybabtuxaybabtuyaybabtu

correct output
628064772

user output
423040978

Feedback: Incorrect character on line 1 col 1: expected "628064772", got "423040978"

Test 42

Group: 5

Verdict:

input
1000000000 50
ababababababababababababababab...

correct output
802946327

user output
609911068

Feedback: Incorrect character on line 1 col 1: expected "802946327", got "609911068"