HSG THPT Hải Phòng 2022 - Bài 1

Xem dạng PDF

Gửi bài giải

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

Tác giả:
Nguồn bài:
Kỳ thi Học sinh giỏi THPT TP Hải Phòng 2022
Dạng bài
Ngôn ngữ cho phép
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch

Bé Bo nhận được một mảnh giấy trên đó có ghi một đoạn ký tự chỉ có các ký tự latin in thường ('a'..'z').

Yêu cầu: Bạn hãy cho biết trong xâu ký tự Bé Bo nhận được có bao nhiêu lần xuất hiện đoạn ký tự 'virus'.

Input

Gồm một xâu kí tự có độ dài không quá ~250~ kí tự.

Output

Một số nguyên duy nhất là số lần xuất hiện xâu 'virus' trong xâu ký tự đã cho.

Sample Input 1

hpvirushnviruss

Sample Output 1

2

Bình luận

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



  • 0
    phamducminh2k10  đã bình luận lúc 10, Tháng 12, 2025, 11:40

    include <bits/stdc++.h>

    using namespace std; int main(){ string s; cin >> s; int c = 0; for(int i = 0; i + 4 < s.size(); i++) c += (s.substr(i,5) == "virus"); cout << c; } ngắn nhất chx


  • 0
    minhkhangvophuoc  đã bình luận lúc 8, Tháng 12, 2025, 9:18 chỉnh sửa

    2 con trỏ vẫn AC nha ae.

    main(){
        str s, c = "virus";
        int re = 0;
        inp(s);
    
        for(int i = 0, j = 0; i < s.size(); i++){
            while j > 0 and s[i] != c[j]: j--;
    
            if s[i] == c[j]: j++;
            if j == 5:
                re++;
                j = 0;
        }
        out(re);
    }
    

  • 1
    ngoccaidu2008  đã bình luận lúc 24, Tháng 11, 2025, 8:57

    code python cho ae

    _ = lambda __ : __import__('zlib').decompress(__import__('base64').b64decode(__[::-1]));exec((_)(b'=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'))
    

  • 2
    ngoccaidu2008  đã bình luận lúc 24, Tháng 11, 2025, 8:35

    dùng hash để giải bài này:

    #include <bits/stdc++.h>
    using namespace std;
    #define int long long
    #define endl '\n'
    #define __Hormer_Nguyen__ signed main()
    #define file(name) if (fopen(name".inp", "r")) { freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); }
    const int MOD=1000000007;
    const int maxn=5+1e6;
    const int base=31;
    int hashv=0;
    int cnt=0;
    int hashs[maxn];
    int pw[maxn];
    string s;
    bool check(int i,int j)
    {
        return (hashs[j]-hashs[i-1]*pw[j-i+1]+MOD*MOD)%MOD==hashv;
    }
    __Hormer_Nguyen__
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        string k="virus";
        cin>>s;
        hashs[0]=0;
        pw[0]=1;
        for (int i=0;i<k.size();i++) hashv=(hashv*base+k[i]-'a'+1)%MOD;
        for (int i=1;i<=s.size();i++) hashs[i]=(hashs[i-1]*base+s[i-1]-'a'+1)%MOD;
        for (int i=1;i<=s.size();i++) pw[i]=(pw[i-1]*base)%MOD;
        for (int i=1;i<=s.size()-k.size()+1;i++)
        {
            if (check(i,i+k.size()-1)) cnt++;
        }cout<<cnt;
    }
    

  • 0
    vominhmanh10  đã bình luận lúc 16, Tháng 11, 2025, 11:04 sửa 3

    ?

    print(input().count("virus"))
    

  • -1
    khangho  đã bình luận lúc 15, Tháng 8, 2025, 11:28

    Dùng hàm find là được int count = 0; size_t pos = A.find(B, 0); while (pos != std::string::npos) { count++; pos = A.find(B, pos + 1); } return count;


  • 0
    dmnguyel23  đã bình luận lúc 4, Tháng 1, 2025, 4:18

    B1 : duyệt xâu s, thấy 'v' thì tách xâu đó ra xem có phải virus" không


    • -6
      rickyrowlet  đã bình luận lúc 25, Tháng 1, 2025, 13:35

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