題目大意:給你乙隻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 ...