• <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>

            Sephiroth's boring days!!!

            Love just for you.

            字符串處理-牛的人品

            【問題描述】

            天蒼蒼,野茫茫,JSZX的菜鳥們來到OI牧場旅游,看到了好多好多的牛。OI牧場所有的牛都覺得自己的Rp最高(簡稱RP牛),為此他們常爭論不休。于是,他們讓JSZX的菜菜們用最最樸素的方法找出這只RP牛。

            經(jīng)過討論,最菜的mmk想出了最樸素的方法:

            我們要以cows的名字為線索,來找出RP牛。

            首先,得到n頭牛的名字清單(每頭牛的名字是一個僅包含小寫字母的字符串,且這些牛的讀寫方式比較特殊—從右到左),然后對每頭牛進行檢驗,檢驗按照牛的讀寫方式進行。規(guī)則如下:

            1.Rp 牛的名字中必須有子串“jszxoier”

            2.將名字中的每個“cow”的替換為“bird”。

            3.計算Rp值:A為名字中子串“r”的個數(shù);

            B為名字中子串“p”的個數(shù);

            C為名字中字串“rp”的個數(shù);

            Rp值即為5×A+5×B+20×C。

            最后輸出RP牛的名字,若有多個RP牛,則輸出名字最短的那個。

            假如你也是牛中一員,盡管你很不屑這樣的水題,但是,你很想到RP牛那里分點Rp,所以你決定解決這道題,并算出RP牛的Rp是多少。

            【輸入】

            第一行,一個數(shù)n(n<=3000)。

            接下來的n行,每行一個字符串,長度<=300,數(shù)據(jù)保證存在RP牛。

            【輸出】

            共兩行

            第一行為RP牛的名字

            第二行為RP牛的Rp值

            【樣例輸入】

            8

            reioxzsjzmy

            mmk

            jwc

            zxf

            jwc

            wangwei

            xcy

            yuhc

            【樣例輸出】

            reioxzsjzmy

            5


            我用KMP匹配的,代碼挺短,還比string.h的好用。

              1: #include <stdio.h>
            
              2: #include <string.h>
            
              3: #include <iostream>
            
              4: #define maxn 400
            
              5: using namespace std;
            
              6: 
            
              7: int f[maxn];
            
              8: char *aa="jszxoier",*bb="cow",*ee="rp",s[maxn];
            
              9: int a,b,c,tem,ans,anslen,len,m;
            
             10: int n;
            
             11: bool t;
            
             12: char anss[400];
            
             13: 
            
             14: void initf(char *s)
            
             15: {
            
             16:     memset(f,0,sizeof(f));
            
             17:     m=strlen(s);
            
             18:     int k=-1;
            
             19:     f[0]=-1;
            
             20:     for (int i=1;i<m;++i)
            
             21:     {
            
             22:         while ((k>-1)&&(s[k+1]!=s[i])) k=f[k];
            
             23:         if (s[k+1]==s[i]) ++k;
            
             24:         f[i]=k;
            
             25:     }
            
             26: }
            
             27: 
            
             28: void changef(char *s)
            
             29: {
            
             30:     initf(s);
            
             31:     int k;
            
             32:     for (int i=0;i<m;++i)
            
             33:     {
            
             34:         k=f[i];
            
             35:         while ((k>-1)&&(s[k+1]==s[i+1])) k=f[k];
            
             36:         f[i]=k;
            
             37:     }
            
             38: }
            
             39: 
            
             40: int main()
            
             41: {
            
             42:     freopen("input.txt","r",stdin);
            
             43:     freopen("output.txt","w",stdout);
            
             44:     
            
             45:     scanf("%d",&n);
            
             46:     for (int dt=1;dt<=n;++dt)
            
             47:     {
            
             48:         memset(s,0,sizeof(s));
            
             49:         scanf("%s",s);
            
             50:         strrev(s);
            
             51:         changef(aa);
            
             52:         len=strlen(s);
            
             53:         int k=-1;
            
             54:         t=0;
            
             55:         for (int i=0;i<len;++i)
            
             56:         {
            
             57:             while ((k>-1)&&(aa[k+1]!=s[i])) k=f[k];
            
             58:             if (aa[k+1]==s[i]) ++k;
            
             59:             if (k==m-1)
            
             60:             {
            
             61:                 t=1;
            
             62:                 break;
            
             63:             }
            
             64:         }
            
             65:         if (!t) continue;
            
             66:         a=b=c=0;
            
             67:         changef(bb);
            
             68:         for (int i=0;i<len;++i)
            
             69:         {
            
             70:             while ((k>-1)&&(bb[k+1]!=s[i])) k=f[k];
            
             71:             if (bb[k+1]==s[i]) ++k;
            
             72:             if (k==m-1) ++a;
            
             73:         }
            
             74:         for (int i=0;i<len;++i)
            
             75:             if (s[i]=='r') ++a;
            
             76:         for (int i=0;i<len;++i)
            
             77:             if (s[i]=='p') ++b;
            
             78:         changef(ee);
            
             79:         for (int i=0;i<len;++i)
            
             80:         {
            
             81:             while ((k>-1)&&(ee[k+1]!=s[i])) k=f[k];
            
             82:             if (ee[k+1]==s[i]) ++k;
            
             83:             if (k==m-1) ++c;
            
             84:         }
            
             85:         tem=a*5+b*5+c*20;
            
             86:         if (tem>ans)
            
             87:         {
            
             88:             memset(anss,0,sizeof(anss));
            
             89:             strcat(anss,s);
            
             90:             ans=tem;
            
             91:             anslen=len;
            
             92:         }
            
             93:         else
            
             94:             if (tem==ans)
            
             95:                 if (len<anslen)
            
             96:                 {
            
             97:                     memset(anss,0,sizeof(anss));
            
             98:                     strcat(anss,s);
            
             99:                 }
            
            100:     }
            
            101:     strrev(anss);
            
            102:     printf("%s\n%d\n",anss,ans);
            
            103:     return 0;
            
            104: }
            
            105: 

            posted on 2010-08-30 21:55 Sephiroth Lee 閱讀(313) 評論(0)  編輯 收藏 引用 所屬分類: 信息奧賽

            free counters
            久久青青草原精品国产不卡| 国产女人aaa级久久久级| 无码人妻久久一区二区三区蜜桃| a级毛片无码兔费真人久久| 久久精品国产亚洲沈樵| 国产成人久久精品一区二区三区| 久久免费香蕉视频| 亚洲午夜久久久久久噜噜噜| 国产精品一区二区久久精品无码 | 亚洲国产另类久久久精品小说| 久久精品国产99久久无毒不卡| 久久久久亚洲?V成人无码| 亚洲国产精品无码久久青草| 欧美激情精品久久久久| 久久强奷乱码老熟女| 免费精品久久天干天干| 久久亚洲精品无码AV红樱桃| 亚洲欧美久久久久9999| 国产亚洲精品自在久久| 久久97久久97精品免视看秋霞| av无码久久久久不卡免费网站| 99久久国产宗和精品1上映| 久久精品国产亚洲沈樵| 思思久久99热只有频精品66| 人人狠狠综合久久亚洲婷婷| www久久久天天com| 久久国产乱子伦免费精品| 亚洲а∨天堂久久精品| 久久精品男人影院| 中文字幕无码免费久久| 99久久免费国产精品| 久久综合综合久久综合| 亚洲国产成人精品女人久久久| 久久亚洲精品无码观看不卡| 久久99中文字幕久久| 久久成人国产精品免费软件| 色婷婷综合久久久久中文字幕 | 久久国产精品免费| 久久99国产精品99久久| 色偷偷偷久久伊人大杳蕉| 亚洲综合日韩久久成人AV|