1. 程式人生 > >hihoCoder #1445 : 字尾自動機二·重複旋律5

hihoCoder #1445 : 字尾自動機二·重複旋律5

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>

#define N 1000001

using namespace std;

int ch[N<<1][26],tot=1;
int fa[N<<1],len[N<<1];
int p,q,np,nq,last=1;

long long ans;

char s[N];

int extend(int c)
{
    len[np
=++tot]=len[last]+1; for(p=last;p && !ch[p][c];p=fa[p]) ch[p][c]=np; if(!p) fa[np]=1; else { q=ch[p][c]; if(len[q]==len[p]+1) fa[np]=q; else { nq=++tot; memcpy(ch[nq],ch[q],sizeof(ch[nq])); fa[nq]
=fa[q]; fa[q]=fa[np]=nq; len[nq]=len[p]+1; for(;ch[p][c]==q;p=fa[p]) ch[p][c]=nq; } } last=np; return len[np]-len[fa[np]]; } int main() { scanf("%s",s+1); int n=strlen(s+1); for(int i=1;i<=n;++i) ans+=extend(s[i]-'
a'); cout<<ans; }

相關推薦

[Hihocoder](1445)字尾自動機·重複旋律5 ----SAM構造

題目傳送門 做法: 我們知道SAM中 l[st] 陣列的意義是狀態st的最長子串的長度 從前一狀態到當前狀態的轉移所增加的子串數量: l[st] - l[slink[st]] AC程式碼: #inc

hihoCoder #1445 : 字尾自動機·重複旋律5

#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define N 1000001 using namespace std; int

hihocoder 1445 : 字尾自動機·重複旋律5字尾自動機

給入門新手的模板題,套kuangbin大佬的模板。 當前節點的minlen就等於當前節點的fa節點的maxlen+1。 #include <bits/stdc++.h> using na

hihocoder 1449 : 字尾自動機三·重複旋律6(字尾自動機

#1449 : 字尾自動機三·重複旋律6 時間限制:15000ms 單點時限:3000ms 記憶體限制:512MB 描述 小Hi平時的一大興趣愛好就是演奏鋼琴。我們知道一個音樂旋律被表示為一段數構成的數列。 現在小Hi想知道一部作品中所有長度為K的旋律中出現次

hihocoder 1449 : 字尾自動機三·重複旋律6

Time Limit:15000ms Case Time Limit:3000ms Memory Limit:512MB 描述 小Hi平時的一大興趣愛好就是演奏鋼琴。我們知道一個音樂旋律被表示為一段數構成的數列。 現在小Hi想知道一部作品中所有長度為K的旋律中出現次

hihoCoder #1465 : 字尾自動機五·重複旋律8

描述 小Hi平時的一大興趣愛好就是演奏鋼琴。我們知道一段音樂旋律可以被表示為一段數構成的數列。 小Hi發現旋律可以迴圈,每次把一段旋律裡面最前面一個音換到最後面就成為了原旋律的“迴圈相似旋律”,還可以對“迴圈相似旋律”進行相同的變換能繼續得到原串的“迴圈相似旋律”。 小Hi對此產生了濃厚的興趣,他有

hihoCoder #1457 : 字尾自動機四·重複旋律7(字尾自動機 + 拓撲排序)

描述 小Hi平時的一大興趣愛好就是演奏鋼琴。我們知道一段音樂旋律可以被表示為一段數構成的數列。 神奇的是小Hi發現了一部名字叫《十進位制進行曲大全》的作品集,顧名思義,這部作品集裡有許多作品,但是所有的作品有一個共同特徵:只用了十個音符,所有的音符都表示成0-9的數字。 現在小Hi想知道這部作品中所

[Hihocoder](1415)字尾陣列三·重複旋律3 ---- 字尾陣列(最長公共子串)

題目傳送門 做法: 我們知道,字串中任意一個子串都是某個字尾的字首 我們也知道了Height陣列的含義是排名為i的字尾與排名i-1的字尾的最長公共字首,即就是最長公共子串。 現在題意讓我們找兩個串的最

hihocoder 後綴自動機·重復旋律5

fin last ext gpo AI string else nbsp line 求不同子串個數 裸的後綴自動機 1 #include<cstring> 2 #include<cmath> 3 #include<

hihocoder 127 字尾自動機一·基本概念

描述 小Hi:今天我們來學習一個強大的字串處理工具:字尾自動機(Suffix Automaton,簡稱SAM)。對於一個字串S,它對應的字尾自動機是一個最小的確定有限狀態自動機(DFA),接受且只接受S的字尾。 小Hi:比如對於字串S="aabbabd",它的字尾自動機是: 其中紅色狀態是終結狀態。你可

hihocoder 後綴自動機五·重復旋律8 求循環同構串出現的次數

變換 iostream hihocode 復雜 img 進行 ron default data- 描述 小Hi平時的一大興趣愛好就是演奏鋼琴。我們知道一段音樂旋律可以被表示為一段數構成的數列。 小Hi發現旋律可以循環,每次把一段旋律裏面最前面一個音換到最後面就成為了

hihoCoder #1184 : 連通性·邊的雙連通分量(邊的雙連通分量模板)

ini ace 個數 學校 代碼 oda 分組 AR ++ #1184 : 連通性二·邊的雙連通分量 時間限制:10000ms 單點時限:1000ms 內存限制:256MB 描述 在基本的網絡搭建完成後,學校為了方便管

Kafka()CentOS7.5搭建Kafka2.11-1.1.0集群與簡單測試

發送 who automatic ready 返回 force script 最大值 sum 一、下載 下載地址: http://kafka.apache.org/downloads.html 我這裏下載的是Scala 2.11對應的 kafka_2.11-1.1

Flink()CentOS7.5搭建Flink1.6.1分布式集群

驗證 sin yarn paths sla dash eight specified oca 一. Flink的下載 安裝包下載地址:http://flink.apache.org/downloads.html ,選擇對應Hadoop的Flink版本下載 [a

Codeforces Round #146 (Div. 1) C - Cyclical Quest 字尾自動機+最小迴圈節

#include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk make_pair #define PII pair<int, int> #defin

【BZOJ4566】找相同字元【字尾自動機

題意  給定兩個字串,求兩個字串相同子串的方案數。 分析  那麼將字串s1建SAM,然後對於s2的每個字首,都在SAM中找出來,並且計數就行。  我一開始的做法是,建一個u和len,順著s2跑SAM,當st[u].next[c]存在的時候,u=st[u].next[c],

MemSQL Start[c]UP 2.0 - Round 1 E - Three strings 廣義字尾自動機

E - Three strings 將三個串加進去,看每個節點在三個串中分別出現了多少次。 #include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk mak

洛谷P3804 字尾自動機

題目描述 給定一個只包含小寫字母的字串SS, 請你求出 SS 的所有出現次數不為 11 的子串的出現次數乘上該子串長度的最大值。 輸入輸出格式 輸入格式:   一行一個僅包含小寫字母的字串SS   輸出格

BZOJ 3998: [TJOI2015]弦論 字尾自動機

3998: [TJOI2015]弦論 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 4251  Solved: 1562 [Submit][Status][Di

Musical Theme(字尾自動機

Musical Theme Time Limit: 1000MS Memory Limit: 30000K 題目大意: 給定一個串,找出滿足條件最長子串: 1,長度大於等於5 2,至少出現兩次 3,至少有兩個出現位置不重疊 子串不一定要嚴格相等,兩兩差值相等即可。