CSES - Aalto Competitive Programming 2024 - wk9 - Wed - Results
Submission details
Task:Ctrl-F
Sender:aalto2024j_002
Submission time:2024-11-06 16:31:27 +0200
Language:C++ (C++17)
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.00 sdetails
#2ACCEPTED0.00 sdetails
#3ACCEPTED0.00 sdetails
#4ACCEPTED0.00 sdetails
#5ACCEPTED0.00 sdetails
#6ACCEPTED0.00 sdetails
#7ACCEPTED0.00 sdetails
#8ACCEPTED0.00 sdetails
#9ACCEPTED0.00 sdetails
#10ACCEPTED0.00 sdetails
#11ACCEPTED0.01 sdetails
#12ACCEPTED0.00 sdetails
#13ACCEPTED0.00 sdetails
#14ACCEPTED0.00 sdetails
#15ACCEPTED0.00 sdetails
#16ACCEPTED0.00 sdetails
#17ACCEPTED0.01 sdetails
#18ACCEPTED0.00 sdetails
#19ACCEPTED0.00 sdetails
#20ACCEPTED0.00 sdetails
#21ACCEPTED0.00 sdetails
#22ACCEPTED0.00 sdetails
#23ACCEPTED0.00 sdetails
#24ACCEPTED0.00 sdetails
#25ACCEPTED0.00 sdetails
#26ACCEPTED0.00 sdetails
#27ACCEPTED0.00 sdetails
#28ACCEPTED0.00 sdetails
#29ACCEPTED0.00 sdetails
#30ACCEPTED0.00 sdetails
#31ACCEPTED0.00 sdetails
#32ACCEPTED0.00 sdetails
#33ACCEPTED0.00 sdetails
#34ACCEPTED0.00 sdetails
#35ACCEPTED0.00 sdetails
#36ACCEPTED0.00 sdetails
#37ACCEPTED0.00 sdetails
#38ACCEPTED0.00 sdetails
#39ACCEPTED0.00 sdetails
#40ACCEPTED0.00 sdetails
#41ACCEPTED0.00 sdetails
#42ACCEPTED0.00 sdetails
#43ACCEPTED0.00 sdetails
#44ACCEPTED0.00 sdetails
#45ACCEPTED0.00 sdetails
#46ACCEPTED0.00 sdetails
#47ACCEPTED0.00 sdetails
#48ACCEPTED0.00 sdetails
#49ACCEPTED0.00 sdetails
#50ACCEPTED0.00 sdetails
#51ACCEPTED0.00 sdetails
#52ACCEPTED0.00 sdetails
#53ACCEPTED0.00 sdetails
#54ACCEPTED0.00 sdetails
#55ACCEPTED0.00 sdetails
#56ACCEPTED0.00 sdetails
#57ACCEPTED0.00 sdetails
#58ACCEPTED0.00 sdetails
#59ACCEPTED0.00 sdetails
#60ACCEPTED0.00 sdetails
#61ACCEPTED0.00 sdetails
#62ACCEPTED0.00 sdetails
#63ACCEPTED0.00 sdetails
#64ACCEPTED0.00 sdetails
#65ACCEPTED0.00 sdetails
#66ACCEPTED0.00 sdetails
#67ACCEPTED0.00 sdetails
#68ACCEPTED0.00 sdetails
#69ACCEPTED0.00 sdetails
#70ACCEPTED0.00 sdetails
#71ACCEPTED0.00 sdetails
#72ACCEPTED0.00 sdetails
#73ACCEPTED0.00 sdetails
#74ACCEPTED0.00 sdetails
#75ACCEPTED0.00 sdetails
#76ACCEPTED0.00 sdetails
#77ACCEPTED0.00 sdetails
#78ACCEPTED0.00 sdetails
#79ACCEPTED0.00 sdetails
#80ACCEPTED0.00 sdetails
#81ACCEPTED0.00 sdetails
#82ACCEPTED0.00 sdetails
#83ACCEPTED0.00 sdetails
#84ACCEPTED0.01 sdetails
#85ACCEPTED0.01 sdetails
#86ACCEPTED0.01 sdetails
#87ACCEPTED0.01 sdetails
#88ACCEPTED0.01 sdetails
#89ACCEPTED0.02 sdetails
#90ACCEPTED0.02 sdetails
#91ACCEPTED0.02 sdetails
#92ACCEPTED0.02 sdetails
#93ACCEPTED0.02 sdetails

Compiler report

input/code.cpp: In constructor 'StringHash::StringHash(const string&, int, int)':
input/code.cpp:11:17: warning: 'StringHash::s' will be initialized after [-Wreorder]
   11 |     std::string s;
      |                 ^
input/code.cpp:9:15: warning:   'const int StringHash::A' [-Wreorder]
    9 |     const int A;
      |               ^
input/code.cpp:17:5: warning:   when initialized here [-Wreorder]
   17 |     StringHash(const std::string& str, int baseA = 911382323, int modB = 972663749)
      |     ^~~~~~~~~~
input/code.cpp: In function 'int main()':
input/code.cpp:75:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   75 |     for(int i=0; i<(b.size()-len); i++){
      |                  ~^~~~~~~~~~~~~~~
input/code.cpp:84:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-...

Code

#include <iostream>
#include <vector>
#include <string>

using namespace std;

class StringHash {
private:
    const int A;
    const int B; 
    std::string s; 
    std::vector<long long> h; 
    std::vector<long long> p; 

public:
  
    StringHash(const std::string& str, int baseA = 911382323, int modB = 972663749)
        : s(str), A(baseA), B(modB), h(str.size()), p(str.size()) {
        preprocess();
    }


    void preprocess() {
        int n = s.size();
        h[0] = s[0] % B; 
        p[0] = 1; 

        for (int k = 1; k < n; ++k) {
            h[k] = (h[k - 1] * A + s[k]) % B; 
            p[k] = (p[k - 1] * A) % B; 
        }
    }

    
    long long getHash() const {
        return h[s.size() - 1];
    }


    long long getSubstringHash(int a, int b) const {
        if (a == 0) {
            return h[b]; 
        }
 
        long long result = (h[b] - h[a - 1] * p[b - a + 1] % B + B) % B;
        return result;
    }

   
    static bool areEqual(const StringHash& hash1, int start1, int end1,
                         const StringHash& hash2, int start2, int end2) {
        if (end1 - start1 != end2 - start2) return false;
        
        
        return hash1.getSubstringHash(start1, end1) == hash2.getSubstringHash(start2, end2);
    }
};

int main() {


    string a,b;
    cin >> a >> b;

    StringHash F(a);

    StringHash T(b);

    int len = a.size()-1;

    int count = 0;

    vector<int> res;

    for(int i=0; i<(b.size()-len); i++){
        if(T.getSubstringHash(i,i+len)==F.getHash()){
            count += 1;
            res.push_back(i);
        }
    }

    cout << count << endl;

    for(int i=0; i<res.size(); i++){
        cout<<res[i]+1;
        if(i!=res.size()-1)cout << " ";
    }
    cout << endl;
}

Test details

Test 1

Verdict: ACCEPTED

input
q q

correct output
1

user output
1
1

Test 2

Verdict: ACCEPTED

input
wr wn

correct output
0

user output
0

Test 3

Verdict: ACCEPTED

input
sy sy

correct output
1

user output
1
1

Test 4

Verdict: ACCEPTED

input
su sub

correct output
1

user output
1
1

Test 5

Verdict: ACCEPTED

input
nrd yjm

correct output
0

user output
0

Test 6

Verdict: ACCEPTED

input
a bbbb

correct output
0

user output
0

Test 7

Verdict: ACCEPTED

input
mtn mtnr

correct output
1

user output
1
1

Test 8

Verdict: ACCEPTED

input
bnp lbnpr

correct output
1

user output
1
2

Test 9

Verdict: ACCEPTED

input
bab aabbb

correct output
0

user output
0

Test 10

Verdict: ACCEPTED

input
aba babab

correct output
1

user output
1
2

Test 11

Verdict: ACCEPTED

input
aabb bbaab

correct output
0

user output
0

Test 12

Verdict: ACCEPTED

input
gx oqxwd

correct output
0

user output
0

Test 13

Verdict: ACCEPTED

input
noe noemx

correct output
1

user output
1
1

Test 14

Verdict: ACCEPTED

input
bbbbbabb aaababaaab

correct output
0

user output
0

Test 15

Verdict: ACCEPTED

input
caaac aaababbcbc

correct output
0

user output
0

Test 16

Verdict: ACCEPTED

input
ayoyl mkiiefsqdh

correct output
0

user output
0

Test 17

Verdict: ACCEPTED

input
svhdno xlxadbfgbc

correct output
0

user output
0

Test 18

Verdict: ACCEPTED

input
accc bcbaacaaca

correct output
0

user output
0

Test 19

Verdict: ACCEPTED

input
wvf jxzmcpktjn

correct output
0

user output
0

Test 20

Verdict: ACCEPTED

input
ac aabacbabbb

correct output
1

user output
1
4

Test 21

Verdict: ACCEPTED

input
l uilzslziog

correct output
2
3 6 

user output
2
3 6

Test 22

Verdict: ACCEPTED

input
zgwjnvgka pltkknwmyo

correct output
0

user output
0

Test 23

Verdict: ACCEPTED

input
d nmmadidafw

correct output
2
5 7 

user output
2
5 7

Test 24

Verdict: ACCEPTED

input
amqltvmp amqltvmpfa

correct output
1

user output
1
1

Test 25

Verdict: ACCEPTED

input
ar mfsykcmfax

correct output
0

user output
0

Test 26

Verdict: ACCEPTED

input
xa twgcnsajxa

correct output
1

user output
1
9

Test 27

Verdict: ACCEPTED

input
bbb babbabbbbb

correct output
3
6 7 8 

user output
3
6 7 8

Test 28

Verdict: ACCEPTED

input
bcbaa aacabaabbb

correct output
0

user output
0

Test 29

Verdict: ACCEPTED

input
ba abcacbaaca

correct output
1

user output
1
6

Test 30

Verdict: ACCEPTED

input
djs nboibdjsfe

correct output
1

user output
1
6

Test 31

Verdict: ACCEPTED

input
nve xbuukrcqfo

correct output
0

user output
0

Test 32

Verdict: ACCEPTED

input
nlwgexw ftarlzogwa

correct output
0

user output
0

Test 33

Verdict: ACCEPTED

input
i tkgsdgircb

correct output
1

user output
1
7

Test 34

Verdict: ACCEPTED

input
ccccba bccbcbabca

correct output
0

user output
0

Test 35

Verdict: ACCEPTED

input
bba ababaaabba

correct output
1

user output
1
8

Test 36

Verdict: ACCEPTED

input
babbb ababaabaaa

correct output
0

user output
0

Test 37

Verdict: ACCEPTED

input
abbabaabaa aaabbaaabb

correct output
0

user output
0

Test 38

Verdict: ACCEPTED

input
sbzifzjntu sbzifzjntu

correct output
1

user output
1
1

Test 39

Verdict: ACCEPTED

input
aaaaaa aaabbaabaa

correct output
0

user output
0

Test 40

Verdict: ACCEPTED

input
abbbab aaaababbba

correct output
0

user output
0

Test 41

Verdict: ACCEPTED

input
jjhzv vxtmwjjhzv

correct output
1

user output
1
6

Test 42

Verdict: ACCEPTED

input
ohdekkui naemwyyvzo

correct output
0

user output
0

Test 43

Verdict: ACCEPTED

input
ba ccbbabaccc

correct output
2
4 6 

user output
2
4 6

Test 44

Verdict: ACCEPTED

input
qltvmpfafstgegcdrryvainxvfpasw...

correct output
1

user output
1
3

Test 45

Verdict: ACCEPTED

input
armfsykcmfaxmvycwxs scnxuwpetq...

correct output
0

user output
0

Test 46

Verdict: ACCEPTED

input
iazfqzyetdvokklp twgcnsajxaxha...

correct output
1
63 

user output
1
63

Test 47

Verdict: ACCEPTED

input
bbb babbabbbbbbabaabababbaaaba...

correct output
14
6 7 8 9 52 53 58 59 64 76 77 7...

user output
14
6 7 8 9 52 53 58 59 64 76 77 7...

Test 48

Verdict: ACCEPTED

input
bcbaa aacabaabbbaccbbabcaacaaa...

correct output
0

user output
0

Test 49

Verdict: ACCEPTED

input
ba abcacbaacacaaaccaabcbcccbac...

correct output
11
6 25 38 44 51 70 72 77 92 94 9...

user output
11
6 25 38 44 51 70 72 77 92 94 9...

Test 50

Verdict: ACCEPTED

input
boibdjsferqewbvyroecpso nboibd...

correct output
1

user output
1
2

Test 51

Verdict: ACCEPTED

input
nvexbuukrcqfoqbwjbytbowawfbmqh...

correct output
0

user output
0

Test 52

Verdict: ACCEPTED

input
nlwgexwftarlzogwazqiwotpahcqhf...

correct output
0

user output
0

Test 53

Verdict: ACCEPTED

input
xjjeioibiv tkgsdgircbrduazzqpf...

correct output
1
66 

user output
1
66

Test 54

Verdict: ACCEPTED

input
ccccba bccbcbabcacaccccbcccaac...

correct output
0

user output
0

Test 55

Verdict: ACCEPTED

input
bba ababaaabbaabbaaabaabaaaabb...

correct output
11
8 12 26 30 37 42 66 72 82 88 9...

user output
11
8 12 26 30 37 42 66 72 82 88 9...

Test 56

Verdict: ACCEPTED

input
babbb ababaabaaabbaabababbaaaa...

correct output
2
46 61 

user output
2
46 61

Test 57

Verdict: ACCEPTED

input
abbabaabaa aaabbaaabbbbaabbabb...

correct output
0

user output
0

Test 58

Verdict: ACCEPTED

input
sbzifzjntuzmiqdhjoiajrskxxntgh...

correct output
1

user output
1
1

Test 59

Verdict: ACCEPTED

input
aaaaaa aaabbaabaababaaabbaabbb...

correct output
0

user output
0

Test 60

Verdict: ACCEPTED

input
abbbab aaaababbbaaabbaaabaabab...

correct output
0

user output
0

Test 61

Verdict: ACCEPTED

input
ghauoeqbgszeeppknnlffspwvyytbm...

correct output
1
40 

user output
1
40

Test 62

Verdict: ACCEPTED

input
ohdekkuinaemwyyvzofxzwgwaryuxm...

correct output
0

user output
0

Test 63

Verdict: ACCEPTED

input
ba ccbbabaccccccccaacaabbbbaaa...

correct output
9
4 6 24 35 54 72 76 83 91 

user output
9
4 6 24 35 54 72 76 83 91

Test 64

Verdict: ACCEPTED

input
qltvmpfafstgegcdrryvainxvfpasw...

correct output
1

user output
1
3

Test 65

Verdict: ACCEPTED

input
armfsykcmfaxmvycwxsscnxuwpetqr...

correct output
0

user output
0

Test 66

Verdict: ACCEPTED

input
ljsoejwqaebfjygmnrdcqoowvcgsei...

correct output
1
569 

user output
1
569

Test 67

Verdict: ACCEPTED

input
bbb babbabbbbbbabaabababbaaaba...

correct output
122
6 7 8 9 52 53 58 59 64 76 77 7...

user output
122
6 7 8 9 52 53 58 59 64 76 77 7...

Test 68

Verdict: ACCEPTED

input
bcbaa aacabaabbbaccbbabcaacaaa...

correct output
2
128 811 

user output
2
128 811

Test 69

Verdict: ACCEPTED

input
ba abcacbaacacaaaccaabcbcccbac...

correct output
115
6 25 38 44 51 70 72 77 92 94 9...

user output
115
6 25 38 44 51 70 72 77 92 94 9...

Test 70

Verdict: ACCEPTED

input
xbdpqykclzyjerkdnyfqrynxbloyps...

correct output
1
174 

user output
1
174

Test 71

Verdict: ACCEPTED

input
nvexbuukrcqfoqbwjbytbowawfbmqh...

correct output
0

user output
0

Test 72

Verdict: ACCEPTED

input
nlwgexwftarlzogwazqiwotpahcqhf...

correct output
0

user output
0

Test 73

Verdict: ACCEPTED

input
dqzgitxhpsubvrsocoxjjeioibivfs...

correct output
1
48 

user output
1
48

Test 74

Verdict: ACCEPTED

input
ccccba bccbcbabcacaccccbcccaac...

correct output
3
229 277 593 

user output
3
229 277 593

Test 75

Verdict: ACCEPTED

input
bba ababaaabbaabbaaabaabaaaabb...

correct output
121
8 12 26 30 37 42 66 72 82 88 9...

user output
121
8 12 26 30 37 42 66 72 82 88 9...

Test 76

Verdict: ACCEPTED

input
babbb ababaabaaabbaabababbaaaa...

correct output
29
46 61 118 126 252 318 330 350 ...

user output
29
46 61 118 126 252 318 330 350 ...

Test 77

Verdict: ACCEPTED

input
abbabaabaa aaabbaaabbbbaabbabb...

correct output
2
167 584 

user output
2
167 584

Test 78

Verdict: ACCEPTED

input
yxlvjhoqnrjzixyyxqypyfcmeujvyn...

correct output
1
36 

user output
1
36

Test 79

Verdict: ACCEPTED

input
aaaaaa aaabbaabaababaaabbaabbb...

correct output
16
147 148 222 223 224 225 303 30...

user output
16
147 148 222 223 224 225 303 30...

Test 80

Verdict: ACCEPTED

input
abbbab aaaababbbaaabbaaabaabab...

correct output
13
208 278 449 539 572 637 698 82...

user output
13
208 278 449 539 572 637 698 82...

Test 81

Verdict: ACCEPTED

input
tkjzptqkkzkyuknjbtdhbxzbvdynoe...

correct output
1
398 

user output
1
398

Test 82

Verdict: ACCEPTED

input
ohdekkuinaemwyyvzofxzwgwaryuxm...

correct output
0

user output
0

Test 83

Verdict: ACCEPTED

input
ba ccbbabaccccccccaacaabbbbaaa...

correct output
106
4 6 24 35 54 72 76 83 91 120 1...

user output
106
4 6 24 35 54 72 76 83 91 120 1...

Test 84

Verdict: ACCEPTED

input
uimfxocfupiquprsfvwrktflasqzwg...

correct output
1
12309 

user output
1
12309

Test 85

Verdict: ACCEPTED

input
armfsykcmfaxmvycwxsscnxuwpetqr...

correct output
0

user output
0

Test 86

Verdict: ACCEPTED

input
bvifyeheqbketqmweyvfwxslczpinq...

correct output
1
72135 

user output
1
72135

Test 87

Verdict: ACCEPTED

input
bbb babbabbbbbbabaabababbaaaba...

correct output
12448
6 7 8 9 52 53 58 59 64 76 77 7...

user output
12448
6 7 8 9 52 53 58 59 64 76 77 7...

Test 88

Verdict: ACCEPTED

input
bcbaa aacabaabbbaccbbabcaacaaa...

correct output
415
128 811 1185 1404 1540 1595 18...

user output
415
128 811 1185 1404 1540 1595 18...

Test 89

Verdict: ACCEPTED

input
ba abcacbaacacaaaccaabcbcccbac...

correct output
22302
6 25 38 44 51 70 72 77 92 94 9...

user output
22302
6 25 38 44 51 70 72 77 92 94 9...

Test 90

Verdict: ACCEPTED

input
hdoncwccngxcinaaxlqqaqeeddicpb...

correct output
1
25985 

user output
1
25985

Test 91

Verdict: ACCEPTED

input
nvexbuukrcqfoqbwjbytbowawfbmqh...

correct output
0

user output
0

Test 92

Verdict: ACCEPTED

input
nlwgexwftarlzogwazqiwotpahcqhf...

correct output
0

user output
0

Test 93

Verdict: ACCEPTED

input
psvihsxqpawhwrzhxgbpkgaeoxkrtp...

correct output
1
108381 

user output
1
108381