PC110302/UVA10010
下周开始就省选了,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; }
PC110302/UVA10010的更多相关文章
- UVA大模拟代码(白书训练计划1)UVA 401,10010,10361,537,409,10878,10815,644,10115,424,10106,465,10494
白书一:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=64609#overview 注意UVA没有PE之类的,如果PE了显示WA. UVA ...
随机推荐
- JS小知识点----基本包装类型和引用类型
var s1 = "some text"; s1.color = "red"; alert(s1.color); //弹出 underfined var s1 ...
- < < < 2013年国家集训队作业 > > >
完成题数/总题数: 道/37道 1. A1504. Book(王迪): 数论+贪心 ★★☆ 2013中国国家集训队第二次作业 2. A1505. 树(张闻涛): 倍增LCA+可 ...
- Shell编程之函数调用
Shell中的函数调用的使用方法见我下面的代码示例: #!/bin/bash # value init ExP="adb shell /data/local/tmp/vpxdec --yv1 ...
- eclipse设置项目发布到tomcat webaap下
之前用myeclipse,自动deploy到web app下.目前的项目换了eclipse,项目被发布到本地,通过一个链接到tomcat中,很不习惯. 设置的地方很隐晦,在tomcat中,而不是在pr ...
- PC-修改IE 与 禁止修改IE
1.注册表编辑器1.1在Windows启动后1.2点击“开始”1.3“运行”菜单项1.4在“打开”栏中键入“regedit”1.5然后按“确定”键 2.首页项2.1展开注册表到“HKEY_LOCAL_ ...
- c#+ArcEngine中的IGroupLayer的用法
转自羊子雄起原文c#+ArcEngine中的IGroupLayer的用法 在AE开发中,我们知道axMapControl.LayerCount能获取图层的数量,但是这种方法不能获取到图层组里面的图层, ...
- 博客搬家到 http://fresky.github.io/ - Visual Studio的插件Pdbproj可以把pdb转换成C++项目
博客搬到了Dawei XU,请各位看官挪步.最新的一篇是:Visual Studio的插件Pdbproj可以把pdb转换成C++项目.
- (linux shell)第一章--小试牛刀(上)
来源:(linux shell)第一章--小试牛刀(上) 从今天開始,我们一起来学习<linux shell脚本攻略>这本书. 1.1简单介绍 shell脚本一般是一个以#!起始的文本文件 ...
- [D3] 12. Basic Transitions with D3
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- 一行代码解决Android M新的运行时权限问题
Android M运行时权限是个啥东西 啥是运行时权限呢?Android M对权限管理系统进行了改版,之前我们的App需要权限,只需在manifest中申明即可,用户安装后,一切申明的权限都可来去自如 ...