Given ambyngrid of letters, (), and a list of words, find the location in the grid at which the word can be found. A word matches a straight, uninterrupted line of letters in the grid. A word can match the letters in the grid regardless of case (i.e. upper and lower case letters are to be treated as the same). The matching can be done in any of the eight directions either horizontally, vertically or diagonally through the grid.
Input
The input begins with a single positive integer on a line by itself indicating the number of the cases following, each of them as described below. This line is followed by a blank line, and there is also a blank line between two consecutive inputs.
The input begins with a pair of integers,mfollowed byn,in decimal notation on a single line. The nextmlines containnletters each; this is the grid of letters in which the words of the list must be found. The letters in the grid may be in upper or lower case. Following the grid of letters, another integerkappears on a line by itself (). The nextklines of input contain the list of words to search for, one word per line. These words may contain upper and lower case letters only (no spaces, hyphens or other non-alphabetic characters).
Output
For each test case, the output must follow the description below. The outputs of two consecutive cases will be separated by a blank line.
For each word in the word list, a pair of integers representing the location of the corresponding word in the grid must be output. The integers must be separated by a single space. The first integer is the line in the grid where the first letter of the given word can be found (1 represents the topmost line in the grid, andmrepresents the bottommost line). The second integer is the column in the grid where the first letter of the given word can be found (1 represents the leftmost column in the grid, andnrepresents the rightmost column in the grid). If a word can be found more than once in the grid, then the location which is output should correspond to the uppermost occurence of the word (i.e. the occurence which places the first letter of the word closest to the top of the grid). If two or more words are uppermost, the output should correspond to the leftmost of these occurences. All words can be found at least once in the grid.
Sample Input
1 8 11 abcDEFGhigg hEbkWalDork FtyAwaldORm FtsimrLqsrc byoArBeDeyv Klcbqwikomk strEBGadhrb yUiqlxcnBjf 4 Waldorf Bambi Betty Dagbert
Sample Output
2 5 2 3 1 2 7 8
#define RUN #ifdef RUN #include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h> #include <string> #include <iostream> #include <sstream> #include <map> #include <set> #include <vector> #include <list> #include <cctype> #include <algorithm> #include <utility> #include <math.h> using namespace std; #define MAXN 55 int n; // Count of test cases int rows, cols; // Grid int m; // Count of words char grid[MAXN][MAXN]; char buf[MAXN]; char candicates[8][MAXN]; void printout(){ for(int i=0; i<rows; i++){ for(int j=0; j<cols; j++){ printf("%c", grid[i][j]); } printf("\n"); } } void strtolower(char* str) { while (*str) { *str = tolower(*str); str++; } } void getCandicates(int i, int j){ memset(candicates, '\0', sizeof(candicates)); int buflen = strlen(buf); int ii=i, jj=j; for(int k=0; k<buflen; k++){ if(ii>=0 && ii<rows && jj>=0 && jj<cols){ candicates[0][k] = grid[ii][jj]; } else{ break; } // right jj++; } ii=i, jj=j; for(int k=0; k<buflen; k++){ if(ii>=0 && ii<rows && jj>=0 && jj<cols){ candicates[1][k] = grid[ii][jj]; } else{ break; } // left jj--; } ii=i, jj=j; for(int k=0; k<buflen; k++){ if(ii>=0 && ii<rows && jj>=0 && jj<cols){ candicates[2][k] = grid[ii][jj]; } else{ break; } // up ii--; } ii=i, jj=j; for(int k=0; k<buflen; k++){ if(ii>=0 && ii<rows && jj>=0 && jj<cols){ candicates[3][k] = grid[ii][jj]; } else{ break; } // down ii++; } ii=i, jj=j; for(int k=0; k<buflen; k++){ if(ii>=0 && ii<rows && jj>=0 && jj<cols){ candicates[4][k] = grid[ii][jj]; } else{ break; } // up-left ii--; jj--; } ii=i, jj=j; for(int k=0; k<buflen; k++){ if(ii>=0 && ii<rows && jj>=0 && jj<cols){ candicates[5][k] = grid[ii][jj]; } else{ break; } // up-right ii--; jj++; } ii=i, jj=j; for(int k=0; k<buflen; k++){ if(ii>=0 && ii<rows && jj>=0 && jj<cols){ candicates[6][k] = grid[ii][jj]; } else{ break; } // down-left ii++; jj--; } ii=i, jj=j; for(int k=0; k<buflen; k++){ if(ii>=0 && ii<rows && jj>=0 && jj<cols){ candicates[7][k] = grid[ii][jj]; } else{ break; } // down-right ii++; jj++; } } bool check(){ for(int i=0; i<8; i++){ if(strlen(buf) != strlen(candicates[i])){ continue; } if(strncmp(buf, candicates[i], strlen(buf)) == 0){ return true; } } return false; } void play(){ //printf("%s\n", buf); for(int i=0; i<rows; i++){ for(int j=0; j<cols; j++){ getCandicates(i, j); if(check()){ printf("%d %d\n", i+1, j+1); return; } } } //getCandicates(1, 0); //for(int i=0; i<8; i++){ // printf("%s\n", candicates[i]); //} } int main(){ #ifndef ONLINE_JUDGE freopen("10010.in", "r", stdin); freopen("10010.out", "w", stdout); #endif scanf("%d", &n); char c; memset(grid, '\0', sizeof(grid)); bool blank = false; for(int i=0; i<n; i++){ if(blank){ printf("\n"); } scanf("%d%d", &rows, &cols); getchar(); for(int j=0; j<rows; j++){ for(int k=0; k<cols; k++){ scanf("%c", &c); if(c>='A' && c<='Z'){ c = c - 'A' + 'a'; } grid[j][k] = c; } getchar(); } //printout(); scanf("%d", &m); for(int j=0; j<m; j++){ memset(buf, '\0', sizeof(buf)); scanf("%s", buf); strtolower(buf); play(); //break; } blank = true; } } #endif
总结一个能把c string转大小写的方法
void strtolower(char* str) { while (*str) { *str = tolower(*str); str++; } }
相关推荐
此扩展将在每个新网页上隐藏waldorf。 当你找到他时,点击他! waldorf正在旅途中。 他的目标是访问世界上的每一个网页。 如果您碰巧找到他,请点击他,他将在您正在查看的页面上徘徊在另一个位置。 Waldorf在哪里...
Waldorf在哪里是一个简单的扩展,它将Waldorf添加到您访问的每个页面。 他将被随机放置在页面上。 如果找到他,只需单击他。 您会收到一个弹出窗口,告诉您找到他所需的时间。 如果Waldorf令人讨厌,则可以使用工具...
自述文件此自述文件通常会记录启动和运行应用程序所需的任何步骤。这个存储库是做什么用的? 快速总结版本我该如何设置? 设置摘要配置依赖关系数据库配置如何运行测试部署说明贡献指南编写测试代码审查其他指南我和...
Waldorf是用Python编写的高效并行任务执行框架。 它是为在中国北京研究算法而开发的。 Waldorf基于,并以芹菜为原料,从得名。 它可以通过在多台计算机上分布以Python函数编写的并发子任务并自动输出集合来加快诸如...
Nelson Waldorf学校Amazon.ca筹款活动。 此扩展将学校的Amazon Associates附属标签应用于购买商品,当他们访问Amazon.ca时,学校就可以收到用于筹款的收益。 支持语言:English
// it's much better to use Blofeld's MIDIIn port for SuperColler's MIDIOut, instead of USB // also connect the USB cable to receive sysex messages coming from Blofeld ~blofeld = Blofeld .new.connect( ...
7. 周边住宿:MarineLand周边有多个酒店供游客选择,如经济实惠的Diplomat Inn,靠近尼亚加拉瀑布和观景台的Marriott Niagara Falls Fallsview Hotel & Spa,以及距离尼亚加拉瀑布仅两英里的Days Inn Lundy's Lane。...
mw1utils:用于Waldorf微波的工具。 包含的工具:mw1cardlist,mw1wav,mw1userwaves,USERWAV4。 Klaus Michael Indlekofer版权所有(c)1993-2017。 版权所有。 注意:有特殊限制。 请参阅下面和发行版中的免责...
- **Waldorf Salad**(沃尔多夫色拉) - **Vegetable Combination Salad**(蔬菜大会色拉) - **Mixed Salad**(什锦色拉) - **Home-Made Vegetable Salad**(家常蔬菜色拉) - **Fruit Salad**(水果色拉) ...
《JavaScript实现的文字冒险游戏:Offenburg Waldorf学校的TextAdventure》 在计算机技术日新月异的今天,编程教育已经逐渐走进了校园。其中,Offenburg的Waldorf学校选择了一种创新的方式——利用JavaScript开发...
该技术由Waldorf Technik公司开发,旨在提供定制化的解决方案,以满足精密医疗工具制造商的具体需求。 文中提到的Waldorf Tecnik公司的VariO TIP FSS自动化系统,是一款超薄壁设计的洁净室生产装置,它能在洁净环境...
s上针对MFCC数据训练src/audio_waldorf_statler.ipynb src/create_visual_feature_csv.py ...创建视觉功能csv文件src/utils.py ...每个项目需要的著名utils.py文件src/visual_feat_ext.py ...辅助功能用于视觉特征...
会议将于1963年4月16~18日在纽约的沃多尔夫-阿斯托里亚星光顶楼(Waldorf Astoria Starlight-Roof)举行。其中有七篇论文是关于量子电子学及有关题目的, 八篇是关于光激射器结构的, 七篇是关于工作物质——光谱学的, ...
有关b-ber背后原理的更多信息,请阅读Triple Canopy的创意总监Caleb Waldorf撰写的“ ”。 要查看使用b-ber制作的示例项目,请访问我们的或在Triple Canopy 。 虽然还有其他用于将内容导出为不同格式的框架,但是b...
4. Waldorf Designs:剧中虚构的一家高端时尚品牌,由角色Blair Waldorf领导,她是剧中的重要人物,追求完美的时尚设计师。 5. 首次亮相(fashion show for buyers):指Blair作为Waldorf Designs新任负责人首次展示...
用于Waldorf机架攻击的远程GUI的Java实现。
《Knights-Ascension》是一款基于Cocos2d-x框架开发的Android游戏,由开发者Andre Popovitch与他的伙伴Zeph Balsley和Joseph Waldorf共同创作。Cocos2d-x是一个广泛使用的开源游戏引擎,它支持多平台开发,包括iOS、...
教育资源对于那些希望结束自己的成年生活或对自己的行为有更自觉的态度,对过度拥挤的公立学校教室进行基础教学或每年在学校里所付出的财富进行选择的惩罚的个人而言,这不是强制性的。私立教育的交换。...