字符串哈希,对每一个样式的字符串找一个他的映射值,如果两个字符串的映射值相同,就说明这两个字符串相同。
刚学的刚学的,写的不好刚学的
#include<iostream> #include<cstring> #include<algorithm> using namespace std ; typedef unsigned long long ULL ; const int N = 1e5 +10, P = 131 ; char a[N]; ULL h[N] , p[N] ; ULL get(int l ,int r) { return h[r] - h[l-1] * p[r-l+1] ; } int main(){ int n , m ; cin >> n >> m ; scanf("%s",a+1) ; p[0] = 1 ; for(int i = 1 ; i <= n ; i++){ h[i] = h[i-1]*P + a[i] ; p[i] = p[i-1] * P ; } while(m --){ int x1 , y1 , x2, y2 ; cin >> x1 >> y1 >> x2 >> y2 ; if(get(x1,y1) == get(x2,y2)) { cout << "Yes" << endl ; }else cout << "No" << endl ; } }