【例題】【連結串列】NKOJ3499【2015多校聯訓6】密碼
NKOJ3499【2015多校聯訓6】密碼
時間限制 : 10000 MS 空間限制 : 165536 KB
評測說明 : 1s
問題描述
假髮通過了不懈的努力,得到了將軍家門鎖的密碼(一串小寫英文字母)。但是假髮被 十四和猩猩他們盯上了,所以假髮需要把密碼傳遞出去。因為假髮不想十四他們發現幾鬆門 前貼的小紙條就是將軍家的密碼,所以他加密了密碼(新八:聽起來有點詭異)。加密方法 如下:隨機地,在密碼中任意位置插入隨機長度的小寫字串。 不過,假髮相信銀桑和他那麼多年小學同學,一定能猜中密碼是什麼的(新八:銀桑什 麼時候成攮夷志士了!!!)。可是,寫完了小紙條之後,假髮覺得有點長,就想截去頭和 尾各一段(可以為空),讓剩下的中間那一段依然包含真~密碼。想著想著,假髮就想知道 有多少種可行方案。結果在沉迷於稿紙之際,假髮被投進了獄門島(新八:……)。於是, 就由你計算了。
輸入格式
兩行非空字串,純小寫英文字母,第一行是加密後的密碼,第二行是原密碼。
第一行長度不超過 300000,第二行不超過 200。
輸出格式
一行,有多少種方案。注意:不剪也是一種方案。
樣例輸入 1
abcabcabc
cba
樣例輸出 1
9
樣例輸入 2
abcabcabac
cba
樣例輸出 2
18
提示
【樣例1解釋】 用(L,R)表示一種方案,其中L和R分別表示截去頭和尾的長度。這9鍾方案分別是 (0,0),(0,1),(0,2),(1,0),(1,1),(1,2),(2,0),(2,1),(2,2)。
來源 bs
思路:
直接匹配密碼在密文中的位置,左邊多的和右邊多的相乘即可,注意不要算重
直接列舉最壞O(n^n),使用連結串列最壞O(nm)
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
char a[300003],b[204];
int lena,lenb;
//.....................................
int ne[300003][27],la[26];//ne[i][j]表示從i開始下一個字母為j的位置,沒有為-1
int make()
{
for(int i=0;i<26;i++) la[i]=-1;
for(int i=lena-1,j;i>=0;i--)
{
for(j=0;j<26;j++)
{
ne[i][j]=la[j];
if(a[i]==j+'a') la[j]=i;
}
}
}
//.....................................
int main()
{
scanf("%s%s",a,b);
lena=strlen(a),lenb=strlen(b);
make();
long long ans=0;
int star=-1,i=la[b[0]-'a'],j,l,r;
bool gengxin;
while(i!=-1)
{
l=i;
gengxin=true;
for(j=1;j<lenb;j++)
{
if(ne[i][b[j]-'a']!=-1) i=ne[i][b[j]-'a'];
else
{
gengxin=false;
break;
}
}
if(gengxin)
{
r=i;
ans+=(l-star)*(lena-r);
star=l;
}
else break;
i=ne[l][b[0]-'a'];
}
cout<<ans;
}
相關文章
- 連結串列面試題(二)---連結串列逆序(連結串列反轉)面試題
- (連結串列)連結串列的排序問題排序
- 連結串列學習(6)
- 「模擬賽」多校 A 層聯訓 16
- 連結串列專題——面試中常見的連結串列問題面試
- noip多校聯考總結
- 【圖解連結串列類面試題】移除連結串列元素圖解面試題
- 【圖解連結串列類面試題】環形連結串列圖解面試題
- 環形連結串列_相交連結串列_多數元素(java語言)Java
- 【LeetCode-連結串列】面試題-反轉連結串列LeetCode面試題
- 連結串列面試題(七)---合併兩個有序連結串列面試題
- 程式碼隨想錄演算法訓練營第4天 | 連結串列兩兩交換、刪除倒N、連結串列相交、環形連結串列演算法
- 連結串列-雙向連結串列
- 連結串列-迴圈連結串列
- 【程式碼隨想錄】二、連結串列:2、設計連結串列
- 【程式碼隨想錄】二、連結串列:1、移除連結串列元素
- 《演算法筆記》6. 連結串列相關面試題總結演算法筆記面試題
- 「模擬賽」A 層多校聯訓 4(賣品:CTH)
- 資料結構與演算法——連結串列 Linked List(單連結串列、雙向連結串列、單向環形連結串列-Josephu 問題)資料結構演算法
- 【資料結構】連結串列(單連結串列實現+詳解+原碼)資料結構
- 連結串列4: 迴圈連結串列
- 連結串列-單連結串列實現
- 連結串列面試題(九)---判斷一個連結串列是否帶環面試題
- 連結串列面試題(四)---查詢連結串列的中間節點面試題
- 2024牛客暑期多校訓練營6
- 連結串列(LinkedList)解題總結
- 程式碼隨想錄演算法訓練營第三天|203(移除連結串列元素),707(設計連結串列),206(反轉連結串列)演算法
- 連結串列面試題(十一)---求帶環單連結串列 環的入口點面試題
- 連結串列入門與插入連結串列
- 連結串列面試題(六)---刪除單連結串列倒數第k個結點面試題
- LeetCode連結串列專題LeetCode
- 單連結串列的排序問題排序
- 2015年大二上-資料結構-連結串列(7)-多項式求和資料結構
- 連結串列
- 程式碼隨想錄訓練營第三天 | 203.移處連結串列元素 707.設計連結串列 206.反轉連結串列
- 帶頭結點的連結串列操作題
- 資料結構連結串列筆試題資料結構筆試
- 連結串列面試題(十)---求帶環單連結串列的環的長度面試題