明文和密文一一對應,考慮對明文dp,用ac自動機判斷密文是否非法(即包含詞典中的詞)。
記f[i][j][k]表示長度為i,密文匹配位於ac自動機的結點j,且正在檢視解密密碼本的第k頁的明文個數。
考慮轉移:
主動轉移,列舉後乙個詞典的詞,用密碼本對應出密文,借助ac自動機來判斷加上這個詞後的明文對應密文是否非法,合法則轉移。
時間複雜度:o(mn|s|^2),其中|s|為詞典大小。
//by cml
#include using namespace std;
const int maxn=60;
const int mod=998244353;
int n,m,k,len[maxn];char s[maxn][maxn];char s[1010];
long long ans[1010],f[1010][51][51];
int out[maxn][26],next[maxn][26];
bool error;
void add(long long &x,long long v)
struct trit
void init()
void insert(char *s)
while (lm) continue;
f=true;
tk=k;
tj=j;
for (int _=0;_>n>>m;
for (int i=0;i<26;++i) }
while (scanf("%s",s[k])!=eof)
t.build();
t.solve();
return 0;
}
CSP 最優配餐
問題描述 棟棟最近開了一家餐飲連鎖店,提供外賣服務。隨著連鎖店越來越多,怎麼合理的給客戶送餐成為了乙個急需解決的問題。棟棟的連鎖店所在的區域可以看成是乙個n n的方格圖 如下圖所示 方格的格點上的位置上可能包含棟棟的分店 綠色標註 或者客戶 藍色標註 有一些格點是不能經過的 紅色標註 方格圖中的線表...
CSP 學生排隊
問題描述 體育老師小明要將自己班上的學生按順序排隊。他首先讓學生按學號從小到大的順序排成一排,學號小的排在前面,然後進行多次調整。一次調整小明可能讓一位同學出隊,向前或者向後移動一段距離後再插入佇列。例如,下面給出了一組移動的例子,例子中學生的人數為8人。0 初始佇列中學生的學號依次為1,2,3,4...
csp火車購票
試題編號 201609 2 試題名稱 火車購票 時間限制 1.0s 記憶體限制 256.0mb 問題描述 請實現乙個鐵路購票系統的簡單座位分配演算法,來處理一節車廂的座位分配。假設一節車廂有20排 每一排5個座位。為方便起見,我們用1到100來給所有的座位編號,第一排是1到5號,第二排是6到10號,...