• <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>
            數(shù)據(jù)加載中……

            USACO 1.3.3 Calf Flac

            這個(gè)題目對(duì)我而言的意義就是讓我熟悉了while (cin.get(ch))這樣的寫(xiě)法.
            之前深入思考過(guò)這個(gè)題目,甚至想要像KMP算法那樣構(gòu)造出一些函數(shù)
            來(lái)降低復(fù)雜度.不過(guò)沒(méi)能想出更好的辦法,最后還是選擇了以前的老辦
            法:枚舉中點(diǎn).
            為了省事,我直接拷貝了一份字符串,而把原來(lái)的字符串作為bak儲(chǔ)存.
            下面是代碼:
             1 /*
             2 ID:31440461
             3 PROG:calfflac
             4 LANG:C++
             5 */
             6 #include<iostream>
             7 #include<string>
             8 using namespace std;
             9 const int MAXL=2000000+10;
            10 int b,e,mlen=0;
            11 char bak[MAXL];
            12 struct re
            13 {
            14     char ch;
            15     int pos;
            16 }
            17 text[MAXL/10];
            18 
            19 int main()
            20 {
            21     freopen("calfflac.in","r",stdin);
            22     freopen("calfflac.out","w",stdout);
            23     int len=-1;
            24     char ch;
            25     while(cin.get(ch)) bak[++len]=ch;   
            26     int l=-1;
            27     for (int i=0;i<=len ;i++ )
            28         if (isalpha(bak[i]))
            29         {
            30             text[++l].ch=toupper(bak[i]);
            31             text[l].pos=i;
            32         }
            33 
            34     /* 以i為中點(diǎn),往兩頭匹配  */
            35     for (int i=0;i<=l ;i++ )
            36     {
            37         int d=1;
            38         while((i-d>=0)&&(i+d<=l)&&(text[i-d].ch==text[i+d].ch)) ++d;
            39         --d;
            40         if (d*2+1>mlen)
            41         {
            42             mlen=d*2+1;
            43             b=text[i-d].pos;
            44             e=text[i+d].pos;
            45         }
            46     }
            47 
            48     /* 以i,i+1為中間兩點(diǎn),向兩邊匹配 */
            49     for (int i=0;i<l;i++ )
            50     {
            51         int d=0;
            52         while ((i-d>=0)&&(i+1+d<=l)&&(text[i-d].ch==text[i+1+d].ch)) ++d;
            53         --d;
            54         if (d*2+2>mlen)
            55         {
            56             mlen=d*2+2;
            57             b=text[i-d].pos;
            58             e=text[i+1+d].pos;
            59         }
            60     }
            61     /* 輸出 */
            62     cout << mlen << endl;
            63     for (int i=b;i<=e ;i++ ) cout << bak[i];
            64     cout << endl;
            65     return 0;
            66 }
            67 
            text的一個(gè)參數(shù)pos表示該處字符在原串中的位置,這樣記錄后輸出就比較方便.

            posted on 2009-07-13 19:08 Chen Jiecao 閱讀(615) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): USACO

            精品熟女少妇AV免费久久| 麻豆精品久久久一区二区| 久久综合久久综合亚洲| 奇米综合四色77777久久| 国产国产成人精品久久| 国产精品久久久久久久久久免费| 久久男人AV资源网站| 久久婷婷五月综合成人D啪 | 开心久久婷婷综合中文字幕| 久久乐国产精品亚洲综合| 日本欧美久久久久免费播放网 | 久久久久久久久久久免费精品| 久久午夜福利电影| 久久精品www人人爽人人| 思思久久99热免费精品6| 国产精品无码久久久久久| 天堂无码久久综合东京热| 国内精品久久久久久99| 久久这里都是精品| 久久久久亚洲精品中文字幕| 久久精品国产亚洲网站| 精品久久久久久久久午夜福利| 久久91精品国产91| 久久精品国产99国产精品| 一级做a爰片久久毛片16| 91精品国产综合久久久久久| 亚洲国产精品无码久久| 久久久午夜精品福利内容| 久久久久亚洲av毛片大| 精品国产青草久久久久福利| 久久精品国产精品青草| 国产精品久久久久久福利69堂| 亚洲AV日韩AV天堂久久| 日韩AV无码久久一区二区| 色诱久久久久综合网ywww| 久久午夜伦鲁片免费无码| 一本一道久久综合狠狠老| 久久成人国产精品免费软件| 99久久这里只精品国产免费| 久久久久高潮综合影院| 2021国内久久精品|