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

coreBugZJ

此 blog 已棄。

EOJ 1010 智能T9英文輸入法

智能T9英文輸入法

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

Description

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

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

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

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

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沒有對應(yīng)的字母,但是1和0也有可能出現(xiàn).

Input

該題含有多組測試數(shù)據(jù)。

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

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

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

Output

對于每組測試數(shù)據(jù)的輸出,包含四個部分.

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

然后是根據(jù)聯(lián)想得到的單詞,即前綴部分完全符合輸入的單詞.

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

然后是糾正一個按鍵之后聯(lián)想得到的單詞.

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

保證不會出現(xiàn)無解情況.

Sample Input

6
BVUJMEE
MUTKOE
BTVLOE
ATVKEI
EVTJNJHF
OVVLMFAABC
288563

Sample Output

BTVLOE
BVUJMEE
MUTKOE
OVVLMFAABC

Source

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


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

  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        /* 二維字符數(shù)組 */
 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 閱讀(629) 評論(0)  編輯 收藏 引用 所屬分類: ACMAlgorithmDataStructure

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            有坂深雪在线一区| 欧美在线看片| 午夜在线观看免费一区| 亚洲一区二区成人在线观看| 99这里有精品| 亚洲一区在线免费观看| 午夜伦欧美伦电影理论片| 欧美一区二区三区免费视| 久久久久久9| 欧美激情导航| 这里是久久伊人| 久久国产一区二区三区| 欧美成人国产一区二区| 欧美日韩国产丝袜另类| 国产精品午夜av在线| 有坂深雪在线一区| 亚洲一区二区三区免费视频| 久久久久国产精品一区三寸| 欧美激情第五页| 一区二区久久久久久| 欧美在线日韩| 欧美三级视频在线观看| 国产在线欧美日韩| 国产精品99久久久久久久久久久久| 午夜久久美女| 亚洲经典三级| 亚洲一卡久久| 欧美成人黑人xx视频免费观看| 国产精品久久久久久久浪潮网站| 激情一区二区三区| 国产精品一区亚洲| 欧美黄色一级视频| 亚洲五月六月| 欧美成人激情在线| 狠狠色狠狠色综合| 性欧美8khd高清极品| 亚洲国产精品黑人久久久| 亚洲欧美影院| 欧美视频在线视频| 亚洲伦理在线观看| 欧美成人免费小视频| 亚洲欧美日韩国产综合在线| 欧美精品国产一区二区| 亚洲第一综合天堂另类专| 欧美一区二区在线观看| 宅男精品导航| 国产精品国产一区二区| 一本色道久久综合亚洲91| 嫩草影视亚洲| 久久久精品久久久久| 国产色视频一区| 欧美一区二视频| 亚洲伊人伊色伊影伊综合网| 欧美性久久久| 亚洲综合国产精品| 一本色道久久| 国产精品video| 亚洲欧美第一页| 亚洲一区国产精品| 国产精品久久综合| 亚洲欧美一区二区激情| 亚洲性夜色噜噜噜7777| 国产精品久久久久久超碰| 亚洲免费网站| 亚洲欧美日韩高清| 国产综合在线看| 蜜臀a∨国产成人精品| 久久影院午夜论| 亚洲精品乱码久久久久久日本蜜臀| 欧美~级网站不卡| 欧美成人伊人久久综合网| 日韩视频免费在线| 一区二区三区高清视频在线观看| 国产精品www网站| 久久精品免视看| 另类尿喷潮videofree| 亚洲黑丝在线| 宅男噜噜噜66国产日韩在线观看| 国产精品―色哟哟| 另类av导航| 欧美国产日韩视频| 亚洲在线视频| 久久国产视频网站| 日韩天天综合| 亚洲欧美日韩人成在线播放| 国产美女诱惑一区二区| 美国十次成人| 欧美日韩亚洲在线| 久久久精品国产一区二区三区| 卡一卡二国产精品| 亚洲字幕在线观看| 亚洲高清不卡一区| 亚洲欧美一区二区激情| 国产日韩欧美日韩大片| 欧美激情一二区| 欧美午夜免费电影| 欧美成人午夜| 国产精品久久久久久影院8一贰佰 国产精品久久久久久影视 | 久久久久**毛片大全| 久久夜色精品| 亚洲欧美国产日韩中文字幕| 久久精品二区亚洲w码| 一本一本a久久| 久久精品91| 亚洲在线观看| 欧美区高清在线| 美女黄网久久| 国产精品亚洲综合| 亚洲激情网站免费观看| 国产亚洲精品久久久久动| 亚洲人成人一区二区三区| 狠狠色2019综合网| 亚洲婷婷免费| 亚洲婷婷国产精品电影人久久| 久久久久综合| 久久国产乱子精品免费女| 欧美日韩视频在线一区二区| 欧美 日韩 国产 一区| 国产精品女同互慰在线看| 亚洲国产精品99久久久久久久久| 国产日韩在线视频| 亚洲香蕉网站| 亚洲影视在线播放| 欧美激情视频网站| 欧美大片18| 亚洲国产专区校园欧美| 久久久久综合| 欧美成人精品高清在线播放| 国自产拍偷拍福利精品免费一| 亚洲在线一区| 午夜视频一区在线观看| 国产精品v欧美精品v日本精品动漫 | 国产精品日韩一区| 一本久久a久久免费精品不卡| 亚洲国产三级| 免费欧美在线视频| 亚洲高清不卡在线| 亚洲另类自拍| 欧美日本久久| 亚洲美女在线一区| 亚洲一区中文| 国产免费亚洲高清| 欧美一区网站| 麻豆成人在线播放| 亚洲激情视频| 欧美日韩一区二区在线观看| 一区二区三区视频免费在线观看| 亚洲一级特黄| 国产亚洲精品资源在线26u| 久久岛国电影| 亚洲国产美国国产综合一区二区| 亚洲卡通欧美制服中文| 美女视频黄a大片欧美| 亚洲第一福利社区| 久久超碰97人人做人人爱| 美女久久网站| 日韩亚洲精品电影| 国产精品久久久久久久久| 午夜精品国产精品大乳美女| 老牛嫩草一区二区三区日本| 亚洲欧洲一区二区三区在线观看| 欧美激情网友自拍| 亚洲综合三区| 亚洲第一主播视频| 亚洲一区一卡| 揄拍成人国产精品视频| 欧美日韩高清在线观看| 亚洲女女做受ⅹxx高潮| 久久综合九九| 一区二区欧美精品| 国产一区二区三区无遮挡| 男人的天堂亚洲在线| 亚洲无毛电影| 欧美激情精品久久久久久免费印度| 一本一本久久| 伊人婷婷欧美激情| 欧美视频日韩视频在线观看| 欧美在线免费观看亚洲| 日韩视频永久免费观看| 久久久人成影片一区二区三区观看| 亚洲高清视频在线观看| 国产精品外国| 欧美日韩成人在线视频| 久久本道综合色狠狠五月| 亚洲人在线视频| 久久夜色精品国产噜噜av| 亚洲一级电影| 91久久国产精品91久久性色| 国产精品久久久一区二区| 欧美成人自拍| 久久婷婷亚洲| 欧美一区三区二区在线观看| 在线视频欧美一区| 亚洲精品一区在线| 亚洲国产cao| 欧美gay视频| 麻豆成人在线观看| 久久久精品久久久久| 欧美亚洲视频一区二区| 国产精品99久久久久久白浆小说|