自動機 構造

2021-08-27 13:55:02 字數 1257 閱讀 3892

題目大意:給你乙隻n個點的確定自動機,和字符集大小m,每個節點都恰好m條轉移邊。構造乙個字串長度不超過1e6,使得從任意節點出發接收這個狀態回到達1號點,n<=100,m<=26。spj。

題解:其實是給你乙個nfa然後求一條路徑,然後我一開始傻叉了,還真的傻了吧唧的寫了個nfa轉dfa以為可過,最後發現那個複雜度是基於正規表示式長度的,而不是nfa的三次……

然後就是你發現題目並不求最短,只要構造,然後發現只要我們每次假裝只有前兩個(1和另乙個)存在,然後走成11,這樣集合大小就會至少減小1,然後就n3了。

#include

#include

#include

#include

#include

#include

#define gc getchar()

#define mp make_pair

#define fir first

#define sec second

#define rep(i,a,b) for(int i=a;i<=b;i++)

#define clr(a,n) memset(a,0,sizeof(int)*((n)+1))

#define n 110

#define debug(x) cerr<<#x<<"="<#define sp <<" "

#define ln namespace

std;

typedef pair pii;

typedef pairint> piii;

inline

int inn()

piii fr[n][n];queue

q;int c,sc,ansc;

int trs[n][n],vis[n],l[n],s[n*n],ans[n*n*n];

inline

int getstep(int sx,int sy,int n,int m)

}loop:sc=0;

for(int x=1,y=1,t;fr[x][y].sec>0;t=x,x=fr[x][y].fir.fir,y=fr[t][y].fir.sec) s[++sc]=fr[x][y].sec;

rep(i,1,sc/2) swap(s[i],s[sc-i+1]);return0;}

int main()

rep(i,1,ansc) printf("%c",ans[i]+'a'-1);

return !printf("\n");

}

有窮的自動機構造

include include include intmain 存放非終結符號 char vt 30 存放終結符號 printf 請輸入規則個數 scanf d n line n for i 0 i 30 i 給字串陣列p,q全部賦值為 0 for j 0 j 30 j printf 請輸入文法 n...

有窮的自動機構造

include include include int main 存放非終結符號 char vt 30 存放終結符號 printf 請輸入規則個數 scanf d n line n for i 0 i 30 i 給字串陣列p,q全部賦值為 0 for j 0 j 30 j printf 請輸入文法 ...

XSY1552 自動機 構造

給你乙個自動機,包含 n 個狀態,指令集為前 m個小寫字母,對於每個狀態 s 和每個指令 i,自動機均有後繼t s,i 請你求出乙個長度不超過220 的指令序列,使得無論自動機當前處在哪個狀態 包括初始狀態 按順序執行指令序列的所有指令後,自動機都處於初始狀態 1 無解輸出 i mpos sibl ...