青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

coreBugZJ

此 blog 已棄。

EOJ 1010 智能T9英文輸入法

智能T9英文輸入法

Time Limit:1000MSMemory Limit:30000KB
Total Submit:235Accepted:57

Description

某款新型手機為了方便用戶,希望開發一種新的英文輸入法.要求在輸入英文的時候輸入法不但能夠做到自動聯想,還能進行自動

糾錯.譬如用戶希望輸入hello這個單詞,他應該輸入43556,但是他不小心輸入了46556.輸入法發現詞庫中找不到任何匹配的單詞,

于是嘗試把6糾正為3,這便是糾錯功能.現在需要你來開發這個輸入法的核心部分.

給出詞庫和用戶的輸入,請你依次給出適合的單詞.

2 A B C
3 D E F
4 G H I
5 J K L
6 M N O
7 P Q R S
8 T U V
9 W X Y Z

注意:1和0沒有對應的字母,但是1和0也有可能出現.

Input

該題含有多組測試數據。

每組數據第一行是一個整數n(1<=n<=100),表示詞庫中的單詞個數.

接下來n行每行是一個詞庫中的單詞.單詞只包含大寫字母,長度不會超過10.不會出現兩個相同的單詞.

最后一行是一個數字串表示用戶的輸入.輸入的長度不會超過10.

Output

對于每組測試數據的輸出,包含四個部分.

首先輸出完全符合輸入的單詞.

然后是根據聯想得到的單詞,即前綴部分完全符合輸入的單詞.

接下來輸出糾正一個按鍵之后完全符合輸入的單詞.

然后是糾正一個按鍵之后聯想得到的單詞.

每部分如果有多個匹配,則按字典順序輸出.

保證不會出現無解情況.

Sample Input

6
BVUJMEE
MUTKOE
BTVLOE
ATVKEI
EVTJNJHF
OVVLMFAABC
288563

Sample Output

BTVLOE
BVUJMEE
MUTKOE
OVVLMFAABC

Source

浙江省2004組隊賽第二試(From TOJ)


暴力,深度優先搜索,根據輸入數字,窮舉所有可能的字母組合,判斷每種字母組合是否符合要求。
睡覺前心血來潮想寫寫這個題目,結果寫到現在,明天補覺。

  1#include <stdio.h>
  2#include <stdlib.h>
  3#include <string.h>
  4
  5#define  N  109
  6#define  L  13
  7#define  K  13
  8#define  E  ('Z'+1)
  9#define  P  13
 10
 11int  n;
 12char word[ N ][ L ];
 13char key[ K ] = "**ADGJMPTW*";
 14
 15int m;
 16char press[ P ];
 17
 18        /* 二維字符數組 */
 19int cmpA( const void *a, const void *b ) {
 20        return strcmp( ((const char*)a), ((const char*)b) );
 21}

 22        /* 一維字符指針 */
 23int cmpP( const void *a, const void *b ) {
 24        return strcmp( (*((const char**)a)), (*((const char**)b)) );
 25}

 26
 27int topAns, topPre, topAns1, topPre1;
 28char *ans[ N ], *pre[ N ], *ans1[ N ], *pre1[ N ];
 29
 30char tmp[ P ];
 31int mod1;
 32
 33void update() {
 34        int i, j;
 35        for ( i = 0; i < n; ++i ) {
 36                for ( j = 0; (tmp[j])&&(word[i][j])&&(tmp[j]==word[i][j]); ++j )
 37                        ;
 38                if ( 0 == tmp[ j ] ) {
 39                        if ( 0 == word[ i ][ j ] ) {
 40                                if ( mod1 ) {
 41                                        ans1[ topAns1++ ] = word[ i ];
 42                                }

 43                                else {
 44                                        ans[ topAns++ ] = word[ i ];
 45                                }

 46                        }

 47                        else {
 48                                if ( mod1 ) {
 49                                        pre1[ topPre1++ ] = word[ i ];
 50                                }

 51                                else {
 52                                        pre[ topPre++ ] = word[ i ];
 53                                }

 54                        }

 55                }

 56        }

 57}

 58
 59void solve( int i ) {
 60        char j, k;
 61        if ( i >= m ) {
 62                tmp[ i ] = 0;
 63                update();
 64                return;
 65        }

 66        for ( j = key[ press[ i ] ]; j < key[ press[ i ] + 1 ]; ++j ) {
 67                tmp[ i ] = j;
 68                solve( i+1 );
 69        }

 70        if ( 0 == mod1 ) {
 71                mod1 = 1;
 72                for ( k = 2; k < 10++k ) {
 73                        if ( k == press[ i ] ) {
 74                                continue;
 75                        }

 76                        for ( j = key[ k ]; j < key[ k + 1 ]; ++j ) {
 77                                tmp[ i ] = j;
 78                                solve( i+1 );
 79                        }

 80                }

 81                mod1 = 0;
 82        }

 83}

 84
 85void outint top, char * stack[] ) {
 86        int i;
 87        if ( top > 0 ) {
 88                qsort( stack, top, sizeof(char*), cmpP );
 89                for ( i = 0; i < top; ++i ) {
 90                        puts( stack[ i ] );
 91                }

 92        }

 93}

 94
 95void output() {
 96        out( topAns, ans );
 97        out( topPre, pre );
 98        out( topAns1, ans1 );
 99        out( topPre1, pre1 );
100}

101
102int main() {
103        int i;
104        key[ 0 ] = key[ 1 ] = key[ 10 ] = E;
105        while ( 1 == scanf( "%d"&n ) ) {
106                for ( i = 0; i < n; ++i ) {
107                        scanf( "%s", word[ i ] );
108                }

109                /* qsort( word, n, sizeof(word[0]), cmpA ); */
110                scanf( "%s", press );
111                m = strlen( press );
112                for ( i = 0; i < m; ++i ) {
113                        press[ i ] -= '0';
114                }

115                topAns = topPre = topAns1 = topPre1 = 0;
116                mod1 = 0;
117                solve( 0 );
118                output();
119        }

120        return 0;
121}

122





09年10月通過的代碼,用了 Trie ,懶得分析了。

  1#include <iostream>
  2#include <cstring>
  3using namespace std;
  4 
  5char * letter[300];
  6 
  7#define  TW    ('Z'+1)
  8#define  TWB   'A'
  9#define  EOW   0
 10struct WordNode
 11{
 12        WordNode(){
 13                bExist = 0;
 14                memset( ch, 0sizeof(ch) );
 15        }

 16        int bExist;
 17        WordNode * ch[TW];
 18}
;
 19 
 20WordNode * root = 0;
 21 
 22#define  WL  20
 23#define  NW  100000
 24char fw[NW][WL], wz[WL];
 25int nw, nz;
 26 
 27void WordInsert( WordNode * & roo, char * p ){
 28        if( roo == 0 ){
 29                roo = new WordNode;
 30        }

 31        if*!= EOW ){
 32                WordInsert( roo->ch[*p], p+1 );
 33        }

 34        else{
 35                roo->bExist = 1;
 36        }

 37        return;
 38}

 39 
 40void WordClear( WordNode * & roo ){
 41        char i;
 42        if( roo == 0 ){
 43                return;
 44        }

 45        for( i=TWB; i<TW; ++i ){
 46                WordClear( roo->ch[i] );
 47        }

 48        delete roo;
 49        roo = 0;
 50        return;
 51}

 52 
 53void FindWord( WordNode * roo, char * p ){
 54        char *pl;
 55        if( roo == 0 ){
 56                return;
 57        }

 58        if*== EOW ){
 59                if( roo->bExist ){
 60                        strcpy( fw[nw], wz );
 61                        ++nw;
 62                }

 63                return;
 64        }

 65        if( (*p=='0'|| (*p=='1') ){
 66                return;
 67        }

 68 
 69        ++nz;
 70        for( pl=letter[*p]; *pl!=EOW; ++pl ){
 71                wz[nz-1= *pl;
 72                FindWord( roo->ch[*pl], p+1 );
 73        }

 74        wz[--nz] = 0;
 75        return;
 76}

 77 
 78void FindAssociateWord( WordNode * roo, char * p ){
 79        char *pl, i;
 80        if( roo == 0 ){
 81                return;
 82        }

 83 
 84        if( p == 0 ){
 85                if( roo->bExist ){
 86                        strcpy( fw[nw], wz );
 87                        ++nw;
 88                }

 89                ++nz;
 90                for( i=TWB; i<TW; ++i ){
 91                        wz[nz-1= i;
 92                        FindAssociateWord( roo->ch[i], 0 );
 93                }

 94                wz[--nz] = 0;
 95                return;
 96        }

 97 
 98        if*== EOW ){
 99                ++nz;
100                for( i=TWB; i<TW; ++i ){
101                        wz[nz-1= i;
102                        FindAssociateWord( roo->ch[i], 0 );
103                }

104                wz[--nz] = 0;
105                return;
106        }

107 
108        if( (*p=='0'|| (*p=='1') ){
109                return;
110        }

111 
112        ++nz;
113        for( pl=letter[*p]; *pl!=EOW; ++pl ){
114                wz[nz-1= *pl;
115                FindAssociateWord( roo->ch[*pl], p+1 );
116        }

117        wz[--nz] = 0;
118        return;
119}

120 
121void FindOutput( void ){
122        char * w[NW], *temp;
123        int i, j, k;
124        for( i=0; i<nw; ++i ){
125                w[i] = fw[i];
126        }

127        for( i=0; i<nw; ++i ){
128                k = i;
129                for( j=i+1; j<nw; ++j ){
130                        if( strcmp( w[k], w[j] ) > 0 ){
131                                k = j;
132                        }

133                }

134                if( k != i ){
135                        temp = w[k];  w[k] = w[i];  w[i] = temp;
136                }

137                printf( "%s\n", w[i] );
138        }

139        nw = 0;
140        return;
141}

142 
143int main(){
144        int n;
145        char tc, s[WL], *pc, i;
146 
147        memset( letter, 0sizeof(letter) );
148        letter['2'= "ABC";
149        letter['3'= "DEF";
150        letter['4'= "GHI";
151        letter['5'= "JKL";
152        letter['6'= "MNO";
153        letter['7'= "PQRS";
154        letter['8'= "TUV";
155        letter['9'= "WXYZ";
156 
157        while( EOF != scanf( "%d"&n ) ){
158                WordClear( root );
159 
160                while( n-- ){
161                        scanf( "%s", s );
162                        WordInsert( root, s );
163                }

164                scanf( "%s", s );
165 
166                nw = nz = 0;
167                FindWord( root, s );
168                FindOutput();
169 
170                nw = nz = 0;
171                FindAssociateWord( root, s );
172                FindOutput();
173 
174                nw = nz = 0;
175                for( pc=s; *pc!=EOW; ++pc ){
176                        for( i='2'; i<='9'++i ){
177                                if( i != *pc ){
178                                        tc = *pc;
179                                        *pc = i;
180                                        FindWord( root, s );
181                                        *pc = tc;
182                                }

183                        }

184                }

185                FindOutput();
186 
187                nw = nz = 0;
188                for( pc=s; *pc!=EOW; ++pc ){
189                        for( i='2'; i<='9'++i ){
190                                if( i != *pc ){
191                                        tc = *pc;
192                                        *pc = i;
193                                        FindAssociateWord( root, s );
194                                        *pc = tc;
195                                }

196                        }

197                }

198                FindOutput();
199        }

200        return 0;
201}

202


 

posted on 2011-10-29 01:07 coreBugZJ 閱讀(625) 評論(0)  編輯 收藏 引用 所屬分類: ACM 、AlgorithmDataStructure

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美jizzhd精品欧美巨大免费| 亚洲国产高清一区| 国产一区亚洲一区| 国产精品视频一二三| 国产精品福利久久久| 国产精品免费小视频| 国产一区二区三区久久久| 国内精品视频久久| 亚洲黄色大片| 亚洲综合色视频| 久久久精品网| 亚洲三级免费观看| 午夜亚洲性色福利视频| 久久青青草综合| 欧美香蕉大胸在线视频观看| 黑人操亚洲美女惩罚| 亚洲免费不卡| 久久精品一区二区三区不卡牛牛| 欧美国产日韩一区| 亚洲综合成人婷婷小说| 免费看亚洲片| 国产精品高潮呻吟久久av无限 | 久久精品99国产精品| 男同欧美伦乱| 香蕉免费一区二区三区在线观看 | 在线视频精品| 久久www成人_看片免费不卡| 亚洲夫妻自拍| 亚洲欧美在线网| 欧美精品一区二区蜜臀亚洲| 国产欧美三级| 一区二区三区精品视频| 美女精品在线| 亚洲欧美在线一区二区| 欧美日韩日本国产亚洲在线| 亚洲国产精品女人久久久| 欧美一区二区成人| 日韩一级不卡| 欧美激情精品| 亚洲大胆美女视频| 久久免费少妇高潮久久精品99| 亚洲免费观看高清完整版在线观看| 久久九九99视频| 国产日韩精品视频一区二区三区| 在线视频欧美精品| 亚洲国产91色在线| 久久综合综合久久综合| 国产亚洲精品aa| 欧美一区二区高清在线观看| 亚洲午夜激情网页| 欧美日韩亚洲国产一区| 日韩一区二区高清| 亚洲日本黄色| 欧美精品久久久久久久| 亚洲精品社区| 亚洲人午夜精品| 欧美精品一区二区久久婷婷| 亚洲激情精品| 亚洲欧洲精品一区二区三区波多野1战4| 久久精品一级爱片| 在线播放中文一区| 欧美xart系列高清| 欧美xxxx在线观看| 日韩一级免费| 中文日韩欧美| 国产欧美精品在线| 久久综合亚州| 欧美成人精品一区| 一区二区精品国产| 亚洲视频一区在线| 国产精品入口夜色视频大尺度| 亚洲欧美日韩国产一区二区| 亚洲一区二区影院| 国产中文一区二区三区| 久久综合伊人77777麻豆| 久久久噜噜噜久久中文字免| 亚洲电影第1页| 亚洲日本免费电影| 国产精品成人v| 久久久久91| 免费成人av资源网| 亚洲一区视频| 久久精品视频在线播放| 亚洲精品美女91| 欧美在线播放一区| 欧美在线一级va免费观看| 亚洲国产精品va| 99热精品在线观看| 国产一区二区三区日韩欧美| 欧美成人高清| 欧美四级在线| 狼人社综合社区| 欧美精品在线观看91| 久久精品亚洲热| 欧美日本三级| 久久综合伊人77777麻豆| 欧美裸体一区二区三区| 久久精品二区| 欧美日韩精品中文字幕| 久久久久久久999精品视频| 欧美成人一区二区在线| 久久激情视频免费观看| 欧美激情中文字幕一区二区| 久久精品国产第一区二区三区最新章节 | 亚洲娇小video精品| 国产欧美 在线欧美| 亚洲高清视频的网址| 国产午夜精品理论片a级大结局| 亚洲日本中文字幕免费在线不卡| 国产又爽又黄的激情精品视频| 日韩网站在线| 最新中文字幕一区二区三区| 欧美在线中文字幕| 亚洲欧美一区二区视频| 欧美日韩国内| 亚洲国产裸拍裸体视频在线观看乱了 | 欧美一区二区三区喷汁尤物| 欧美风情在线观看| 麻豆freexxxx性91精品| 国产日韩在线看| 亚洲天堂av综合网| 一本久久精品一区二区| 另类欧美日韩国产在线| 久久中文精品| 国产一区二区精品久久99| 亚洲图片你懂的| 亚洲一区二区免费看| 欧美日本免费一区二区三区| 亚洲区第一页| 日韩午夜在线视频| 欧美高清视频一区| 亚洲国产精品成人一区二区 | 久久久久久免费| 国产视频自拍一区| 欧美在线免费观看视频| 久久九九热re6这里有精品| 国产视频欧美| 欧美一区网站| 亚洲国产另类 国产精品国产免费| 午夜精品久久久久久久99水蜜桃| 亚洲欧美日韩精品综合在线观看| 国产精品99免费看| 亚洲一区二区三区四区五区午夜 | 国产精品久久中文| 亚洲欧美国产高清| 久久欧美中文字幕| 91久久亚洲| 欧美片在线观看| 一本到12不卡视频在线dvd| 亚洲一区久久久| 国产日产高清欧美一区二区三区| 香蕉久久精品日日躁夜夜躁| 久久免费国产精品1| 最新日韩在线| 欧美午夜美女看片| 香蕉久久夜色精品| 欧美福利视频一区| 一区二区三区日韩| 国产日韩久久| 欧美电影免费网站| 亚洲一区尤物| 欧美mv日韩mv国产网站app| 亚洲伦理网站| 国产日韩精品电影| 欧美成人激情视频免费观看| 日韩一区二区免费看| 久久久久久成人| 一区二区三区四区五区视频| 国产日韩欧美麻豆| 欧美成人精品一区| 亚洲欧美一区二区原创| 欧美国产视频一区二区| 亚洲欧美www| 亚洲精品视频二区| 国产精品青草久久| 免费永久网站黄欧美| 亚洲免费视频网站| 亚洲第一精品电影| 欧美在线视频全部完| 亚洲日本视频| 国语自产精品视频在线看| 欧美日韩免费观看中文| 久久久精品2019中文字幕神马| 9l国产精品久久久久麻豆| 久久在精品线影院精品国产| 亚洲一区二区三区高清| 亚洲国产精品日韩| 国产午夜一区二区三区| 欧美色大人视频| 欧美国产精品v| 久久久在线视频| 欧美一区二区三区在线观看| 亚洲美女色禁图| 亚洲国产成人不卡| 久久久免费av| 欧美一区二区三区在线看| 一区二区免费在线视频| 亚洲黄色毛片| 亚洲高清成人| 在线观看亚洲视频|