<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      字符串K次失配匹配

      如果在正常的字符串匹配的基礎上,如果我們加入可以有 \(K\) 個地方不一樣該怎么做?

      有一道這個問題的弱化,這篇文章記錄一下這道題:P3763 [TJOI2017] DNA

      這到題是允許有 3 個以下地方不一樣,但不影響這種問題的思路。

      就是正常的二分哈希。

      我們記錄兩個串的哈希,到時候查找區間的哈希直接求就行了。

      枚舉每一個起始位置進行二分到最后一個匹配的位置,判斷是否要使用機會。

      這個是 \(O(nklogn)\) 的。

      代碼↓

      點擊查看代碼
      #include <bits/stdc++.h>
      #define ull unsigned long long
      using namespace std;
      namespace BaiBaiShaFeng{
      	const int MN=1e5+115;
      	const int P=113;
      	string s_0, s;
      	int n, m, ans=0;
      	ull hashed0[MN], p[MN], h[MN];
      	void Read(){
      		cin>>s_0>>s; p[0]=1; ans=0;
      		n=s_0.size(); m=s.size();
      		for(int i=1; i<=n; ++i) p[i]=(p[i-1]*P);
      		s_0=' '+s_0; s=' '+s;
      	}
      	void Pre(){
      		for(int i=1; i<=n; ++i)
      			hashed0[i]=hashed0[i-1]*P+(s_0[i]-'A');
      		for(int i=1; i<=m; ++i)
      			h[i]=h[i-1]*P+(s[i]-'A');
      	}
      	int get0(int l, int r){
      		return hashed0[r]-hashed0[l-1]*p[r-l+1];
      	}
      	int get1(int l, int r){
      		return h[r]-h[l-1]*p[r-l+1];
      	}
      	bool Check(int s0l, int s0r, int sl, int sr){
      		if(s0l>n||s0r>n||sl>m||sr>m) return false;
      		return get0(s0l, s0r)==get1(sl,sr);
      	}
      	void solve(){
      		Read(); Pre();
      		for(int st=1; st<=n-m+1; ++st){
      			int pos=1;//當前匹配的位置
      			int pos0=st;
      			int cnt=0, valid=false;
      			while(pos<=m){
      				if(pos0>n){
      					valid=true;
      					break;
      				}
      				int l=0, r=min(m-pos+1,n-pos0+1), res=0;
      				while(l<=r){
      					int mid=(l+r)>>1;
      					if(Check(pos0,pos0+mid-1,pos,pos+mid-1)){
      						res=mid; l=mid+1;
      					}else{
      						r=mid-1;
      					}
      				}
      				pos+=res; pos0+=res;
      				if(pos<=m){
      					cnt++;
      					if(cnt>3){
      						valid=true;
      						break;
      					}
      					pos++; pos0++;
      				}
      			}
      			if(!valid&&cnt<=3){
      				ans++;
      			}
      		}
      		cout<<ans<<'\n';
      	}
      }
      int main(){
      	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
      	int T=1; cin>>T; 
      	while(T--){
      		BaiBaiShaFeng::solve();
      	}
      	return 0;
      }
      
      posted @ 2025-10-16 11:07  BaiBaiShaFeng  閱讀(7)  評論(0)    收藏  舉報
      Sakana Widget右下角定位
      主站蜘蛛池模板: 男女动态无遮挡动态图| 日本五十路熟女一区二区| 无码伊人久久大杳蕉中文无码| 性色av一区二区三区v视界影院 | 日本毛茸茸的丰满熟妇| 怡春院久久国语视频免费| 国产成人久久综合第一区| 99riav精品免费视频观看| 97超级碰碰碰久久久久app| 亚洲成a人片在线视频| 人妻精品人妻无码一区二区三区 | 亚洲国产精品无码久久电影| 欧美国产日韩在线三区| 亚洲精品理论电影在线观看| 麻豆久久天天躁夜夜狠狠躁| 国产成人av电影在线观看第一页| 我国产码在线观看av哈哈哈网站| 日韩伦理片| 亚洲中文字幕无码专区| 成人精品老熟妇一区二区| 性色在线视频精品| 亚洲一区二区三区| 江门市| 中文字幕亚洲无线码在线| 少妇办公室好紧好爽再浪一点| 亚洲综合色成在线观看| 成人伊人青草久久综合网| 精品日韩亚洲av无码| 久久人人97超碰精品| 动漫AV纯肉无码AV电影网| 亚洲av成人一区国产精品| 国产精品无码专区| 国产午夜精品视频在线播放| 国产精品美女免费无遮挡| 国产精品不卡一区二区三区| 国内自拍小视频在线看| 亚洲国产另类久久久精品| 亚洲欧美高清在线精品一区二区| 国产成人精品日本亚洲网站 | 国内精品免费久久久久电影院97| 四虎国产精品永久入口|