A - A Secret -擴展KMP

題目大意:
給你兩個字符串A,B,現在要你求B串的后綴在A串中出現的次數和后綴長度的乘積和為多少。
題解:
擴展KMP模板題,將A和B串都逆序以后就變成了求前綴的問題了,擴展KMP求處從i位置開始的最長公共前綴存于數組。
最后通過將數組的值不為0的進行一個桶計數,倒著進行一下求和就可以了。注意,在這個題目上擴展kmp處理出來的是
ex[ i ]數組是 A串的每個從 i 位置開始的后綴 ,與B串的最長公共前綴長度,那么這樣B串在A串上匹配的情況就一目了然了。
#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
const int N = 1000005;
int Next[N];
long long ex[N],tong[N]; //即extand[]
char p[N],t[N];
int T;
long long ans;
void pre()   // next[i]: 以第i位置開始的子串 與 T的公共前綴
{int lp=strlen(p);Next[0]=lp;int j=0,k=1;while(j+1<lp && p[j]==p[j+1]) j++;Next[1]=j;for(int i=2; i<lp; i++){int P=Next[k]+k-1;int L=Next[i-k];if(i+L<P+1) Next[i]=L;else{j=max(0,P-i+1);while(i+j<lp && p[i+j]==p[j]) j++;  // 枚舉(p+1,length) 與(p-k+1,length) 區間比較Next[i]=j;k=i;}}
}
void exkmp()
{int lp=strlen(p),lt=strlen(t);pre();  //next數組初始化int j=0,k=0;while(j<lt && j<lp && p[j]==t[j]) j++;ex[0]=j;for(int i=1; i<lt; i++){int P=ex[k]+k-1;int L=Next[i-k];if(i+L<P+1) ex[i]=L;else{j=max(0,P-i+1);while(i+j<lt && j<lp && t[i+j]==p[j]) j++;ex[i]=j;k=i;}}
}
int main()
{scanf("%d",&T);while(T--){memset(tong,0,sizeof(tong));scanf("%s%s",&t,&p);int lt=strlen(t);int lp=strlen(p);reverse(p,p+lp);reverse(t,t+lt);exkmp();ans=0;for(int i=0; i<lt; i++)tong[ex[i]]++;for(int i=lp;i;i--){tong[i]=(tong[i]+tong[i+1])%mod;ans=(ans+tong[i]*i%mod)%mod;}printf("%lld\n",ans);}
}

  

轉載于:https://www.cnblogs.com/SDUTNING/p/10388792.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/280308.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/280308.shtml
英文地址,請注明出處:http://en.pswp.cn/news/280308.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

.NET 代碼優化 聊聊邏輯圈復雜度

本文屬于 dotnet 代碼優化系列博客。相信大家都對圈復雜度這個概念很是熟悉&#xff0c;本文來和大家聊聊邏輯的圈復雜度。代碼優化里面&#xff0c;一個關注的重點在于代碼的邏輯復雜度。一段代碼的邏輯復雜度越高&#xff0c;那么維護起來的難度也就越大。衡量代碼的邏輯復雜…

GO語言基礎條件、跳轉、Array和Slice

1. 判斷語句if 1. 條件表達式沒有括號&#xff08;這點其他語言轉過來的需要注意&#xff09; 2. 支持一個初始化表達式&#xff08;可以是并行方式&#xff0c;即&#xff1a;a, b, c : 1, 2, 3) 3. 左大括號必須和條件語句或 else 在同一行 4. 支持單行模式 5. 初始化語句中的…

干式真空泵原理_如何安裝干式墻錨在墻壁上懸掛重物

干式真空泵原理If you ever plan to mount something to the wall that’s even remotely heavy, you’ll need to use drywall anchors if a stud isn’t available. Here are the different types of drywall anchors, and how to use each one. 如果您打算將甚至更重的東西安…

sharding-jdbc學習

sharding-jdbc的全局id生成策略是通過雪花算法來實現的。 sharding-jdbc也是一個數據的中間件&#xff0c;可實現讀寫分離和分庫分表&#xff0c;比mycat要簡單些。 nginx與ribbon實現負載均衡的區別&#xff1a;nginx是實現服務器端的負載均衡&#xff0c;ribbon是實現客戶端即…

像go 一樣 打造.NET 單文件應用程序的編譯器項目bflat 發布 7.0版本

現代.NET和C#在低級/系統程序以及與C/C/Rust等互操作方面的能力完全令各位刮目相看了&#xff0c;有人用C#開發的64位操作系統: GitHub - nifanfa/MOOS: C# x64 operating system pro...&#xff0c;截圖要介紹的是一個結合Roslyn和NativeAOT的實驗性編譯器bflat &#xff1a;h…

添加dubbo.xsd的方法

整合dubbo-spring的時候&#xff0c;配置文件會報錯 因為 阿里關閉在線的域名了.需要本地下載xsd文件 所以&#xff0c;需要下載本地引入。 解決方式&#xff1a; 在dubbo的開源項目上找到xsd文件&#xff1a; https://github.com/alibaba/dubbo Idea使用本地xsd Setting…

Spring Cloud Feign注意點

2019獨角獸企業重金招聘Python工程師標準>>> 1、只要在啟動類中加入EnableFeignClients注解&#xff0c;才會掃描FeignClient注解 2、Feign主要是通過接口調用&#xff0c;底層其實也是HttpClient/OkHttp 1&#xff09;提供一個Feign接口&#xff0c;加入對應的rest…

.gitkeep是什么? .gitignore和.gitkeep之間的區別(譯)

你是不是在git工程里遇到過.gitkeep文件&#xff1f;如果你通過angular腳手架來生成angular2或者angular4工程&#xff0c;你會發現.gitkeep文件在./src/app/assets文件夾里。你對著個文件感到奇怪嗎&#xff1f;我們都知道我們的老朋友.gitignore。你也許會覺得它是.gitignore…

掃描PDF417崩潰的原因找到:手機攝像頭分辨率低

換孩子姥姥華為手機解決了。 能掃pdf417碼了轉載于:https://www.cnblogs.com/strongdady/p/9049155.html

word 替換 增加引號_如何在Word 2013文檔中替換部分(不是全部)智能引號

word 替換 增加引號Word includes a setting that allows you to automatically convert straight quotes to smart quotes, or specially curved quotes, as you type. However, there may be times you need straight quotes and you may have to convert some of the quotes…

i-i.me:網址導航真的是偽需求嗎?

每一個程序員都有一個框架夢&#xff0c;每一個站長曾經都有一個網址導航夢。本人從07年開始接觸互聯網&#xff0c;成為一名中國草根站長&#xff0c;到現在終于熬成半個程序員。10年時間&#xff0c;沒有賺到錢&#xff0c;也沒有練就一身過硬的技術&#xff08;所以叫半個程…

.Net AOT--Win11搭建和編譯 X64 匯編

楔子&#xff1a;windows11上編譯x64匯編&#xff0c;很多人不太了解。甚至搞出DOSBox這種幾億年前的老古董&#xff0c;還有的專門搞些Linux下面的工具來搞到Windows上運行。其實這些大可不必&#xff0c;也沒這么麻煩。微軟技術出身&#xff0c;基本上工具鏈齊全。本篇來看下…

安裝mongoDB遇見的一個路徑問題

如果安裝路徑不存在&#xff0c;則不會解壓EXE軟件&#xff01; 安裝monogoDB后&#xff0c;它不會自動添加執行路徑&#xff01; 意思就是安裝路徑是D盤下面的mongoDB文件夾&#xff0c;假如不存在這個文件夾&#xff0c;則不會安裝成功 你需要添加路徑&#xff1a; 你可以利用…

Codeforces VK Cup 2015 A.And Yet Another Bracket Sequence(后綴數組+平衡樹+字符串)

這題做得比較復雜。。應該有更好的做法 題目大意&#xff1a; 有一個括號序列&#xff0c;可以對其進行兩種操作&#xff1a; 向里面加一個括號&#xff0c;可以在開頭&#xff0c;在結尾&#xff0c;在兩個括號之間加。 對當前括號序列進行循環移動&#xff0…

【Filecoin源碼倉庫全解析】第一章:搭建Filecoin測試節點

2019.2.14 情人節&#xff0c;Filecoin項目開放了核心源碼倉庫go-filecoin&#xff0c;并更新了 filecoin-project organization下的諸多核心成果&#xff0c;這意味著&#xff0c;Filecoin已然度過了最困難的難點攻關期&#xff0c;進入到了全民公測階段。 本系列文章將協助大…

DNS 代理?Pipy:這我也可以

Pipy 是個可編程代理&#xff0c;曾經我們做過 TCP/HTTP 代理、MQTT 代理、Dubbo 代理、Redis 代理、Thrift 代理。前幾天有人問 DNS[1] 的代理能不能做&#xff1f;當然可以&#xff0c;而且 DNS 代理已經應用在 跨集群流量調度 中&#xff0c;文末經對此進行簡單地介紹。閱讀…

如何在Windows中快速輕松地將文件發送到SkyDrive

We have already shown you how you can share external folders with your SkyDrive, but what if you actually want to copy a file or folder into your SkyDrive folder? Of course copying and pasting is nowhere near geeky enough, so here’s how to add a SkyDrive…

性能測試一些相關的概念

1.壓測任務需求的確認 確定好工作范圍&#xff1a; 首先分析壓測最容易出現瓶頸的地方&#xff0c;有目的的進行測試。 用戶更關心整個系統中哪個環節的性能情況也會影響工作范圍。2. 壓力測試 通過不斷加壓被測系統&#xff0c;直到性能指標達到飽和&#xff0c;這種測試能夠找…

阿里云雙11全球狂歡節 計算資源買買買

本文講的是阿里云雙11全球狂歡節 計算資源買買買【IT168資訊】除了喜歡屯奶粉和運動裝備的消費者外&#xff0c;創業者也能加入雙11“買買買”狂歡。11月2日&#xff0c;阿里云宣布加入天貓雙11全球狂歡節&#xff0c;全線計算資源產品在官網狂歡售賣&#xff0c;與創業者共同打…

windows刪除桌面ie_從Windows 8“開始”屏幕啟動IE的桌面版本

windows刪除桌面ieThere are two versions of Internet Explorer in Windows 8, one you can only launch from the Start Screen and the Desktop version which you can only launch from the Desktop. Lets look at how we can launch the Desktop version from the Start S…