Gửi bài giải


Điểm: 0,09 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M
Input: stdin
Output: stdout

Dạng bài
Ngôn ngữ cho phép
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch

Cho xâu ~A~ và xâu ~B~ chỉ gồm các chữ cái thường. Xâu ~B~ được gọi là xuất hiện tại vị trí ~i~ của xâu ~A~ nếu: ~A_{i} = B_1~, ~A_{i+1} = B_2~, ..., ~A_{i+length( B )-1} = B_{length( B )}~.

Hãy tìm tất cả các vị trí mà ~B~ xuất hiện trong ~A~.

Input

  • Dòng ~1~: xâu ~A~.
  • Dòng ~2~: xâu ~B~.

Độ dài ~A~, ~B~ không quá ~1000000~.

Output

  • Ghi ra các vị trí tìm được trên ~1~ dòng (thứ tự tăng dần). Nếu ~B~ không xuất hiện trong ~A~ thì bỏ trắng.

Sample Input

aaaaa
aa

Sample Output

1 2 3 4

Bình luận

Hãy đọc nội quy trước khi bình luận.



  • 0
    NguyenTuanKieT_K66  đã bình luận lúc 13, Tháng 11, 2025, 15:30

    include <bits/stdc++.h>

    define ll long long

    using namespace std; ll hashT[1000005],poww[1000005]; string p,t; ll gethash(ll i,ll j) { return hashT[j]-hashT[i-1]poww[j-i+1]; } int main() { cin>>t>>p; ll hashP=0; for(ll i=0;i<p.size();i++) hashP=((hashP26)+p[i]); poww[0]=1; hashT[0]=0; for(ll i=1;i<=t.size();i++){ poww[i]=(poww[i-1]26); hashT[i]=(hashT[i-1]26)+t[i-1]; } for(ll i=1;i<=t.size()-p.size()+1;i++) if(gethash(i,i+p.size()-1)==hashP)cout<<i<<" "; return 0; }


  • 0
    nhanleff  đã bình luận lúc 8, Tháng 11, 2025, 8:38

    Code Automaton: https://www.ideone.com/lKVhGl


  • -3
    namta1082012  đã bình luận lúc 26, Tháng 9, 2025, 14:19

    Code c++ nhe moi nguoi :(Hoi Kho):

    include <bits/stdc++.h>

    using namespace std;

    int main() { ios::syncwithstdio(false); cin.tie(nullptr);

    string s, t;
    if (!(cin >> s >> t)) return 0;
    int n = s.size(), m = t.size();
    vector<int> pi(m, 0);
    for (int i = 1; i < m; i++) {
        int j = pi[i-1];
        while (j > 0 && t[i] != t[j]) j = pi[j-1];
        if (t[i] == t[j]) j++;
        pi[i] = j;
    }
    vector<int> res;
    int j = 0;
    for (int i = 0; i < n; i++) {
        while (j > 0 && s[i] != t[j]) j = pi[j-1];
        if (s[i] == t[j]) j++;
        if (j == m) {
            res.push_back(i - m + 2); 
            j = pi[j-1];
        }
    }
    for (int i = 0; i < (int)res.size(); i++) {
        if (i) cout << ' ';
        cout << res[i];
    }
    cout << '\n';
    
    return 0;
    

    }


  • -4
    vominhmanh10  đã bình luận lúc 16, Tháng 9, 2025, 12:36

    hàm z hoặc kmp nó y hệt

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    
    vector<int> z(string s) {
        int n = s.size();
        vector<int> p(n, 0);
        p[0] = 0;
        for (int i = 1, l = 0, r = 0; i < n; i++) {
            if (i <= r) p[i] = min(p[i - l], r - i + 1);
            while (i + p[i] < n && s[p[i]] == s[i + p[i]]) p[i]++;
            if (i + p[i] - 1 > r) {
                l = i;
                r = i + p[i] - 1;
            }
        }
        return p;
    }
    
    int main() {
        ios::sync_with_stdio(0);
        cin.tie(0); cout.tie(0); 
        string s; cin >> s;
        string t; cin >> t;
        int n = s.size();
        int m = t.size();
        vector<int> p = z(t + '#' + s);
        for (int i = m; i < n + m; i++) {
            if (p[i] == m) cout << i - m << " ";
        }
    
    }
    

  • -3
    2024_VoBaoNam  đã bình luận lúc 19, Tháng 6, 2025, 14:38

    best with Z algo


  • 10
    HeroMinhSteve  đã bình luận lúc 20, Tháng 5, 2025, 8:03

    Thấy cmt chưa có Z nên mình góp cho vui hihi

    https://ideone.com/VbQFEz


  • 2
    nongquan  đã bình luận lúc 7, Tháng 5, 2025, 9:10

    mn tham khao : https://ideone.com/C0VlS7


  • -5
    nehuy7410  đã bình luận lúc 13, Tháng 3, 2025, 12:48 sửa 2

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -5
    keelythuytrang  đã bình luận lúc 8, Tháng 1, 2025, 16:42

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -3
    minhkochamhoc  đã bình luận lúc 8, Tháng 1, 2025, 13:55

    test cuối lấy sao vậy ạ mình bị TLE rồi :<


  • -1
    Dinh_Phuc_Minh  đã bình luận lúc 26, Tháng 12, 2024, 14:37

    dung KMP.


  • -12
    anhtuancabun  đã bình luận lúc 13, Tháng 7, 2024, 2:31

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -171
    phu142857  đã bình luận lúc 13, Tháng 7, 2021, 3:00

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • 60
    PPAP_1264589  đã bình luận lúc 13, Tháng 6, 2021, 17:22

    Nếu dùng thuật Hash các bạn chú ý để long long nhé. Base cũng không nên quá lớn


    • 9
      NguyenHuuNhatQuang  đã bình luận lúc 29, Tháng 10, 2022, 5:05

      Hash thì để mod vừa phải và int cũng được để buff tốc độ chạy mặc dù không quá nhiều :D


    • 15
      kazamahoang  đã bình luận lúc 2, Tháng 7, 2021, 13:57

      Tại sao vậy bạn


      • 25
        PPAP_1264589  đã bình luận lúc 4, Tháng 7, 2021, 14:23

        Bởi trường hợp xấu nhất việc lấy mã hash có thể tràn số do vượt quá kiểu int :/

        Base không nên quá lớn cũng vì lý do này (theo kinh nghiệm của mình) :D


        • 7
          kazamahoang  đã bình luận lúc 5, Tháng 7, 2021, 9:50 chỉnh sửa

          Thế tràn bộ nhớ thì sao bạn

          với cả base không lớn thì sai số á :((


          • -42
            abcd1234  đã bình luận lúc 9, Tháng 1, 2022, 14:06 chỉnh sửa

            Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.