乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      [bzoj1030] [JSOI2007]文本生成器

       印度阿三17 2019-02-10

      Description

        JSOI交給隊(duì)員ZYX一個任務(wù),編制一個稱之為“文本生成器”的電腦軟件:該軟件的使用者是一些低幼人群,他們現(xiàn)在使用的是GW文本生成器v6版。該軟件可以隨機(jī)生成一些文章―――總是生成一篇長度固定且完全隨機(jī)的文
      章—— 也就是說,生成的文章中每個字節(jié)都是完全隨機(jī)的。如果一篇文章中至少包含使用者們了解的一個單詞,那么我們說這篇文章是可讀的(我們稱文章a包含單詞b,當(dāng)且僅當(dāng)單詞b是文章a的子串)。但是,即使按照這樣的標(biāo)準(zhǔn),使用者現(xiàn)在使用的GW文本生成器v6版所生成的文章也是幾乎完全不可讀的?。ZYX需要指出GW文本生成器 v6生成的所有文本中可讀文本的數(shù)量,以便能夠成功獲得v7更新版。你能幫助他嗎?

      Input

        輸入文件的第一行包含兩個正整數(shù),分別是使用者了解的單詞總數(shù)N (<= 60),GW文本生成器 v6生成的文本固定長度M;以下N行,每一行包含一個使用者了解的單詞。這里所有單詞及文本的長度不會超過100,并且只可能包含英文大寫字母A..Z

      Output

        一個整數(shù),表示可能的文章總數(shù)。只需要知道結(jié)果模10007的值。

      Sample Input

      2 2
      A
      B

      Sample Output

      100  

      Solution

      \(AC\)自動機(jī)上\(dp\)。

      正難則反,考慮統(tǒng)計(jì)不合法的字串。

      先建出\(AC\)自動機(jī),然后這題其實(shí)就和bzoj1009: [HNOI2008]GT考試差不多了。

      設(shè)\(f[i][j]\)表示長度為\(i\)的串,最后一位在自動機(jī)上的第\(j\)個點(diǎn),然后枚舉狀態(tài) ,轉(zhuǎn)移給兒子就好了。

      #include<bits/stdc  .h>
      using namespace std;
      
      void read(int &x) {
          x=0;int f=1;char ch=getchar();
          for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-f;
          for(;isdigit(ch);ch=getchar()) x=x*10 ch-'0';x*=f;
      }
      
      #define write(x) printf("%d\n",x)
      
      const int maxn = 2e4 10;
      const int mod = 10007;
      
      int n,m,f[102][maxn];
      char c[maxn];
      
      int qpow(int a,int x) {
          int res=1;
          for(;x;x>>=1,a=1ll*a*a%mod) if(x&1) res=1ll*res*a%mod;
          return res; 
      }
      
      struct AC_automaton {
          int son[maxn][26],fail[maxn],tot,vis[maxn];
          void ins(char *s) {
              int len=strlen(s 1),now=0;
              for(int i=1,t;i<=len;i  ) {
                  if(!son[now][t=s[i]-'A']) son[now][t]=  tot;
                  now=son[now][t];
              }vis[now]=1;
          }
          void build() {
              queue<int > q;for(int i=0;i<26;i  ) if(son[0][i]) q.push(son[0][i]);
              while(!q.empty()) {
                  int now=q.front();q.pop();
                  for(int i=0;i<26;i  ) 
                      if(son[now][i]) fail[son[now][i]]=son[fail[now]][i],q.push(son[now][i]);
                      else son[now][i]=son[fail[now]][i];
                  if(vis[fail[now]]) vis[now]=1;
              }
          }
          void solve() {
              f[0][0]=1;
              for(int i=0;i<m;i  ) 
                  for(int j=0;j<=tot;j  ) {
                      if(vis[j]||!f[i][j]) continue;
                      for(int k=0;k<26;k  ) f[i 1][son[j][k]]=(f[i 1][son[j][k]] f[i][j])%mod;
                  }
              int ans=0;
              for(int i=0;i<=tot;i  ) if(!vis[i]) ans=(ans f[m][i])%mod;
              write((qpow(26,m)-ans mod)%mod);
          }
      }AC;
      
      int main() {
          read(n),read(m);
          for(int i=1;i<=n;i  ) scanf("%s",c 1),AC.ins(c);
          AC.build(),AC.solve();
          return 0;
      }
      來源:http://www./content-4-111851.html

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章