• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            pku 1625 Censored! 自動機經典題,手寫高精度WA了5次。。。。。

            題意:
            問不包含n個子串的長度為m的字符串的構造個數。

            解法:
            構造trie圖,然后DP求長度為m的合法串個數
            以前高精度都靠java,這次手寫,各種錯誤。。。唉。。

            代碼:
              1 # include <iostream>
              2 # include <cstring>
              3 using namespace std;
              4 struct BigInteger
              5 {
              6     int bit[100];
              7     bool init;
              8     BigInteger()
              9     {
             10         memset(bit,0,sizeof(bit));
             11         init=true;
             12     }
             13     BigInteger operator+(const BigInteger &pos)
             14     {
             15         BigInteger res;
             16         res.init=init;
             17         for(int i=0;i<99;i++)
             18         {
             19             res.bit[i]+=bit[i]+pos.bit[i];
             20             res.bit[i+1]+=res.bit[i]/10;
             21             res.bit[i]%=10;
             22         }
             23         return res;
             24     }
             25     void print()
             26     {
             27         int i;
             28         for(i=99;i>0&&!bit[i];i--);
             29         for(int j=i;j>=0;j--)
             30             cout<<bit[j];
             31         cout<<endl;
             32     }
             33 };
             34 struct node
             35 {
             36     node *nxt[51],*pre;
             37     bool end;
             38     void clear()
             39     {
             40         memset(nxt,NULL,sizeof(nxt));
             41         end=false;
             42         pre=NULL;
             43     }
             44     node()
             45     {
             46         clear();
             47     }
             48 }buffer[200];
             49 int map[255];
             50 int c=1,n,m,num;
             51 void insert(char *str)
             52 {
             53     node *p=buffer;
             54     for(int i=0;str[i]!='\0';i++)
             55     {
             56         if(!(p->nxt[map[str[i]]]))
             57                 p->nxt[map[str[i]]]=&buffer[c++];
             58         p=p->nxt[map[str[i]]];
             59     }
             60     p->end=true;
             61 }
             62 void make_per()
             63 {
             64     int s=-1,e=-1;
             65     node *q[200];
             66     node *p=buffer;
             67     for(int i=0;i<n;i++)
             68         if(p->nxt[i])
             69         {
             70             p->nxt[i]->pre=p;
             71             q[++e]=p->nxt[i];
             72         }
             73         else
             74             p->nxt[i]=p;
             75     while(s!=e)
             76     {
             77         p=q[++s];
             78         for(int i=0;i<n;i++)
             79         {
             80             node *pre=p->pre;
             81             while(pre->nxt[i]==NULL) pre=pre->pre;
             82             if(p->nxt[i])
             83             {
             84                 p->nxt[i]->pre=pre->nxt[i];
             85                 p->nxt[i]->end=(p->nxt[i]->pre->end||p->nxt[i]->end);
             86                 q[++e]=p->nxt[i];
             87             }
             88             else
             89                 p->nxt[i]=pre->nxt[i];
             90         }
             91     }
             92 }
             93 BigInteger dp[200][55],zero,one;
             94 BigInteger solve(int s,node *p)
             95 {
             96     if(p->end) return zero;
             97     else if(s==m) return one;
             98     else if(!(dp[p-buffer][s].init)) return dp[p-buffer][s];
             99     else
            100     {
            101         dp[p-buffer][s].init=false;
            102         for(int i=0;i<n;i++)
            103         { 
            104             dp[p-buffer][s]=dp[p-buffer][s]+solve(s+1,p->nxt[i]);
            105         }
            106         return dp[p-buffer][s];
            107     }
            108 
            109 }
            110 int main()
            111 {
            112     cin>>n>>m>>num;
            113     char str[128];
            114     cin>>str;
            115     int tc=0;
            116     for(int i=0;str[i]!='\0';i++)
            117         map[str[i]]=tc++;
            118     while(num--)
            119     {
            120         cin>>str;
            121         insert(str);
            122     }
            123     make_per();
            124     one.bit[0]=1;;
            125     solve(0,buffer);
            126     dp[0][0].print();
            127     return 0;
            128 
            129 }


            posted on 2011-01-13 09:57 yzhw 閱讀(295) 評論(1)  編輯 收藏 引用 所屬分類: DP 、string algorithm

            評論

            # re: pku 1625 Censored! 自動機經典題,手寫高精度WA了5次。。。。。 2011-01-13 09:58 yzhw

            為什么用矩陣乘法不可以?誰能解釋下。。  回復  更多評論   

            <2011年1月>
            2627282930311
            2345678
            9101112131415
            16171819202122
            23242526272829
            303112345

            導航

            統計

            公告

            統計系統

            留言簿(1)

            隨筆分類(227)

            文章分類(2)

            OJ

            最新隨筆

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            成人资源影音先锋久久资源网| 看全色黄大色大片免费久久久| 亚洲国产精品嫩草影院久久| 久久久久久午夜精品| 久久国产精品一国产精品金尊| 亚洲国产精品无码久久九九| 久久经典免费视频| 精品久久久久久无码专区不卡| 色8激情欧美成人久久综合电| 精品久久一区二区| 国产精品久久久久久吹潮| 伊人久久综合热线大杳蕉下载| 久久天天躁狠狠躁夜夜躁2O2O| 久久精品国产99久久久古代| 污污内射久久一区二区欧美日韩| 亚洲精品tv久久久久久久久| 亚洲国产精品无码久久九九| 国产情侣久久久久aⅴ免费| 久久天天躁狠狠躁夜夜2020老熟妇| 中文字幕乱码人妻无码久久| 漂亮人妻被中出中文字幕久久| 亚洲午夜福利精品久久| 久久99国产亚洲高清观看首页 | 久久婷婷国产综合精品| 久久亚洲电影| 伊人久久免费视频| 久久精品视频免费| 色综合久久中文字幕无码| 色8激情欧美成人久久综合电| 亚洲一区二区三区日本久久九| 亚洲熟妇无码另类久久久| 中文字幕无码av激情不卡久久| 久久久精品国产亚洲成人满18免费网站 | 亚洲国产成人久久综合碰| 国产亚州精品女人久久久久久| 欧美777精品久久久久网| 欧美日韩中文字幕久久伊人| 久久精品国产精品亚洲毛片| 久久久久久久久久久久中文字幕| 无码人妻久久一区二区三区免费| 亚洲午夜无码久久久久|