CCCPaste

Untitled

#include 
#include 
#include 
using namespace std;
string pattern, text;
const int B = 256;
const int MOD = INT_MAX;
void robin_carp() {
    int hash_pattern = 0, hash_text = 0;
    for(int i = 0; i < (int) pattern.size(); i++) {
        hash_pattern = (B * hash_pattern + pattern[i]) % MOD;
        hash_text = (B * hash_text + text[i]) % MOD;
    }
    cout << hash_pattern << " " << hash_text << endl;
    int h = 1;
    for(int i = 0; i < (int) pattern.size() - 1; i++) {
        h = (h * B) % MOD;
    }
    for(int i = 0; i <= (int) text.size() - (int) pattern.size(); i++) {
        if(hash_pattern == hash_text) {
            bool ok = true;
            for(int j = 0; j < (int) pattern.size(); j++) {
                if(text[i + j] != pattern[j]) {
                    ok = false;
                    break;
                }
            }
            if(ok) {
                cout << "found at: " << i << endl;
            }
            
        }
        if(i < (int) text.size() - (int) pattern.size()) {
            hash_text = (B * (hash_text - text[i] * h) + text[i + (int) pattern.size()]) % MOD;
            if(hash_text < 0) {
                hash_text += MOD;

            }
        }
    }
    
}
int main() {
    ios_base::sync_with_stdio(false);
    cin >> pattern >> text;
    robin_carp();
    return 0;
}
/*
 
 **/