BZOJ4416 Shoi2013 階乘字串

2022-05-03 23:15:16 字數 1129 閱讀 4466

給定乙個由前n個小寫字母組成的串s。

串s是階乘字串當且僅當前n個小寫字母的全排列(共n!種)都作為s的子串行(可以不連續)出現。

由這個定義出發,可以得到乙個簡單的列舉法去驗證,但是它實在太慢了。所以現在請你設計乙個演算法,在1秒內判斷出給定的串是否是階乘字串。

輸入第1行乙個整數t,表示這個檔案中會有t組資料。

接下來分t個塊,每塊2行:

第1行乙個正整數n,表示s由前n個小寫字母組成。

第2行乙個字串s。

對於每組資料,分別輸出一行。每行是yes或者no,表示該資料對應的串s是否是階乘字串。22

bbaa

2aba

noyes

【樣例解釋】

第一組資料中,ab這個串沒有作為子串行出現。

n<=26

t<=5

|s|<=450

設f[s]表示當s中集合中的字母構成的排列均在原序列[1,f[s]]出現的最小值。

#include#include

#include

#include

#include

#include

#define rep(i,s,t) for(int i=s;i<=t;i++)

#define dwn(i,s,t) for(int i=s;i>=t;i--)

#define ren for(int i=first[x];i;i=next[i])

using

namespace

std;

inline

intread()

const

int maxn=510

;const

int maxm=1

<<22

;int n,m,f[maxm],g[maxn][23

];char

s[maxn];

void

solve()

dwn(i,m+1,0

) rep(s,

1,(1

<1

) puts(f[(

1<1]<=m?"

yes":"no"

);}intmain()

view code

Bzoj3562 神器化合物 Shoi 2014

ac通道 分析 若把每乙個原子看作乙個節點,將化學鍵看作一條邊,那麼這個題目要求的 分子的個數 很容易就可以看出是求圖中聯通塊的個數。求聯通塊的個數,可以使用並查集。可如何求出每一步的聯通塊的個數呢?可以知道,當連上一條邊時,若此邊連線的是兩個不同的聯通塊,那麼分子個數就會減一 當刪去一條邊時,若刪...

BZOJ 3566 SHOI2014 概率充電器

題目 題意 給定樹形結構的n個元件,每個元件有一定概率自己充電,還有一定概率通過某條邊給其他元件充電,求充電的元件期望個數。n 500000 題解 樹形結構肯定能想到樹形dp,全樹對某點產生的貢獻一般可以通過一到兩遍樹形dp計算得出,本題所求期望等於每個元件被充電的概率之和。設f i 表示i被充電的...

bzoj3566 SHOI2014 概率充電器

n個充電器連成一棵樹。第i個充電器有p i 的概率直接充電。每條導線有一定機率可以導電。可以導電的導線形成的聯通塊中只要存在直接充電的結點整個聯通塊的充電器均進入充電狀態。問期望進入充電狀態的充電器個數 顯然可知我們只需要得到f i 表示i進入充電狀態的概率 那麼a ns f i 我們把無根樹變有根...