這個講的還行
how many hdu - 2609
題意:給你很多個字串,然後他們可以旋轉成為相同的字串,就是同乙個字串,問有多少個不同的字串
分析:我們要把這些字串都變成相同的一種,這樣,我們就可以直接知道有多個不同的字串了。
最小表示法,將乙個字串旋轉成為字典序最小的字串
這個題就是把每個字串都用最小表示法,然後set來看一下有多個不同的字串
注意set 裡面不要放陣列。。比如set < char * > 或者set < int * >
#include
#include
#include
#include
#include
#include
using
namespace
std;
const
int maxn = 110;
char s[maxn];
set set;
int sum=0;
void getminsub(char *s)
else
if(s[ni]>s[nj])
else k++;
if(i==j) j++;
}i=min(i,j);
string ans="";
int h=0;
while(hif(i>=len) i-=len;
ans+=s[i];
h++;
i++;
}if(set.count(ans)==0)
return ;
}int main()
printf("%d\n",sum);
}return
0;}
最小表示法
最小表示法就是找出字串s的的迴圈同構串中字典序最小的乙個。那麼什麼是迴圈同構串呢。是 設s bcad 且s 是s 的迴圈同構的串。s 可以是 bcad 或者cadb,adbc,dbca 即在字串s中從i 0開始,從i迴圈到字串末尾,再從頭迴圈到i,所形成的字元就是s迴圈同構串。因為這樣的同構串不止乙...
最小表示法
最小表示法 思想 在字串迴圈同構問題中的應用 摘自周源的ppt 前言 最小表示法 比起動態規劃 貪心等思想,在當今競賽中似乎並不是很常見。但是在解決判斷 同構 一類問題中卻起著重要的作用。本文即將討論字串中的同構問題,如何巧妙地運用最小表示法來解題呢,讓我們繼續一起思考吧。到底什麼是迴圈同構的字串呢...
最小表示法
最小表示法與kmp演算法一樣都可以解決字串匹配問題,但效率更高,短,作用更大。最小表示法就是乙個字串的最小字典序。怎麼求乙個字串的最小字典序呢?首先將這個字串擴充套件一倍 建設存在d陣列裡 然後我們用三個指標i 0,j 1,k 0,來尋找最小字典序的開頭字母,為了優於kmp,我們要做到o n i表示...