dtoj1348 第一字串 first

2022-07-31 20:48:13 字數 1217 閱讀 6566

bessie 最近在玩字串。她發現通過改變字母的順序可以使一些字串排在其他所有的字串之前(按字典序從小到大排序)。

比如說,bessie 找到了對於字串」omm」,」moo」,」mom」,和」ommnom」,她可以用標準的字母表把」mom」 排在最前面, 也可以用字母表」abcdefghijklonmpqrstuvwxyz」把」omm」排在最前面。但是,bessie 不能找出乙個方案使」moo」或」ommnom」排在最前面。

請你幫助bessie 找出哪些字串可以通過改變字母表來讓它們排在最前面。要計算字串x 是否字典序比字串y 小,要找到兩個字串最先出現的不同字元的位置,j。如果沒有這樣的位置存在,那麼如果x 的長度比y 短,則x 字典序小於y。否則,如果x[j]在字母表中比y[j]早出現,那麼x 字典序小於y。

sol考慮建trie 在trie上dfs然後維護各個字母的大小關係,遇到關鍵點check下就沒了

效率 n*26*26

#include#include

#include

#include

#include

#include

#include

#define maxn 300005

using

namespace

std;

int n,tr[maxn][26

],cnt,id[maxn],can[maxn];

int s[26][26],f[26],in[26

],sum;

char

ch[maxn];

string

a[maxn];

void ins(int

x) id[k]=x;

}bool dfs(int k,int

co)

in[k]=0

;

returnt;}

void check(int

x) can[x]=1;sum++;

}void dfs(int

k)

for(int i=0;i<26;i++)

for(int i=0;i<26;i++)

}}int

main()

dfs(0);

cout

for(int i=1;i<=n;i++)if(can[i])cout

return0;

}

view code

第一字串 Trie Topology

bessie最近在玩字串。她發現通過改變字母的順序可以使一些字串排在其他所有的字串之前 按字典序從小到大排序 比如說,bessie找到了對於字串 omm moo mom 和 ommnom 她可以用標準的字母表把 mom 排在最前面,也可以用字母表 abcdefghijklonmpqrstuvwxyz...

字串(一) 字串Hash

今天開一手最不 tao 擅 yan 長的字串演算法 字串hash演算法。似乎提到字串的話,kmp應該是更為常見的一種,但是hash有它的優點,被犇們稱為 優雅的暴力 何謂hash?hash的中文稱為雜湊,這當然是音譯,直譯過來就是雜湊,或者也有叫預對映的。雜湊的作用就是通過某個特殊函式的對映,將任意...

演算法題(一) 字串

public static string submax string strarr else if max k system.out.println max return arrays.copyofrange strarr,start,end 1 給定兩個字串str1,str2。如果兩者字元種類和相...