PC110302/UVA10010
来源:互联网 发布:淘宝家具安装工挣钱 编辑:程序博客网 时间:2024/06/17 17:44
下周开始就省选了,ACM的日子在今年内应该就会结束了,大三了,最后一次机会了,小小感伤一下……
今天广州下大雨,心情怪怪的,感觉码不出质量高的,又很久没做过PC了,就刷刷水题吧。
老实说Program challenge的题目,输入输出特麻烦……搞到我PE了三次,从没试过……我今天的转速很低。
这题目有点像字符串匹配,规模也很小,随便写了一下。
我发现我现在做字符串很喜欢用map。c++有三宝,stl,template,class.其中我觉得最重要的就前两者啦,虽然很多用都以面向对象来形容c++,但是c++的更精华在与stl,模版。
好啦,回归正题,
题目要求按米字八个方向寻找单词,并是上左优先,一定能找到。
我的算法(准确来说是做法,没什么算法可言)。经过基本的tolow操作,化成小写字母,之后利用map,对每个出现的字母映射到一个vector,从上到下,从左到右的位置。
之后对每一个要匹配的单词,取出第一个字母,找到对应的vector,每一个point去做检索,检索到了,就是最优了,输出,OK。
由于今天心情真的不怎么样,做完SOLVED后没有看别人代码了。
/*******************************************************************************//* OS : 3.2.0-58-generic #88-Ubuntu SMP Tue Dec 3 UTC 2013 GNU/Linux * Compiler : g++ (GCC) 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) * Encoding : UTF8 * Date : 2014-03-30 * All Rights Reserved by yaolong.*****************************************************************************//* Description: ********************************************************************************************************************************************//* Analysis: ***********************************************************************************************************************************************//*****************************************************************************/#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<vector>#include<map>using namespace std;class point{public: int x,y; point(int x,int y) { this->x=x; this->y=y; } point() {}};char toLow(char a){ if(a<'a') return a+'a'-'A'; return a;}map<char,vector<point> > mp;vector<string> str;char p[60][60];int dx[]= {1,1, 1,-1,-1,-1,0, 0};int dy[]= {1,0,-1, 1, 0,-1,1,-1};void fun(string s){ int siz=s.size(); int i=0,j; char cur_s; int cur_i=1; point pt=mp[s[0]][i]; while(cur_i<siz) { pt=mp[s[0]][i++]; for(j=0; j<8; j++) { int nx=pt.x,ny=pt.y; int flag=1; cur_i=1; while(cur_i<siz) { cur_s=s[cur_i]; nx+=dx[j]; ny+=dy[j]; if(p[nx][ny]!=cur_s) { flag=0; break; } cur_i++; } if(flag) break; } } cout<<pt.x<<" "<<pt.y<<endl;}int main(){ char tmp; int cases,n,m,i,j,k; int first=1; cin>>cases; while(cases--) { if(first) first=0; else cout<<endl; mp.clear(); str.clear(); getchar(); cin >>n>>m; memset(p,'.',sizeof(p)); for(i=1; i<=n; i++) for(j=1; j<=m; j++) { cin>>tmp; tmp=toLow(tmp); mp[tmp].push_back(point(i,j)); p[i][j]=tmp; } cin>>k; str.resize(k); for(i=0; i<k; i++) { cin>>str[i]; for(j=0; j<str[i].length(); j++) str[i][j]=toLow(str[i][j]); } for(i=0; i<k; i++) { fun(str[i]); } } return 0;}
0 0
- PC110302/UVA10010
- uva10010
- uva10010
- UVA10010
- UVA10010
- UVA10010
- uva10010
- uva10010--String
- ACM-uva10010
- uva10010 - Where's Waldorf?
- uva10010 - Where's Waldorf?
- UVa10010 Where's Waldorf?
- UVA10010 Where's Waldorf?
- uva10010 - Where's Waldorf?
- UVA10010 Where's Waldorf?
- UVa10010 - Where's Waldorf?
- UVA10010 - Where's Waldorf?
- uva10010 - Where's Waldorf?
- 优先队列
- web应用和web.xml文件的一点知识点
- 常用的在CALayer上画图的方法
- 每天一个小程序(14)——交换排序之双向冒泡排序
- 保存相关模型数据(HABTM)
- PC110302/UVA10010
- 用java的程序得到本机的ip地址
- 序列化---序列化的含义和意义
- Java并发编程之线程管理(高级线程同步8)
- Linux安装MySQL数据库
- LeetCode之Single Number II
- powerpc的linux驱动writel的疑问
- MapReduce实现倒排序索引
- LeetCode之removeDuplicates