8 条题解
-
1
Ck0123 LV 9 @ 14 年前
jjh好厉害!!!
-
07 年前@
so water
-
011 年前@
请刚开始做这到题目的先阅读本文章,以免错误,虽然题目说只有一个能匹配,但事实不是这样的。单词的首位置是有多个的。我就是由于一开始因为这一点而折腾了四五次才过的。
有多个首位置时a1,a2,a3……时,输出只有一个,是“最佳”的,所谓最佳是指它的最优方向在这些解中是也是最优方向,而且它的位置要行和列要尽量小(第一关键字:他的最优方向小的在前,第二关键字:行,小的在前,第三关键字:列)
解法:
1.首先找到第一个首字母和单词一样的位置,然后从这个位置按方向的优劣先后扩展。看是否正确。
code
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>int r,c,w;
char s[100][101];
char word[102];
int go[][2] = {{+1,+1},{0,+1},{-1,+1},{-1,0},{-1,-1},{0,-1},{+1,-1},{+1,0}};
char d[10] ="DCBAHGFE";int main()
{
int i;void init();
void find();init();
for (i = 0;i < w;i++) {
scanf("%s",word);
find();
}
return 0;
}int l,ll;
int is_right(int x,int y,int xa,int ya)
{
l = strlen(word)-1;
ll = 1;
if ((x+xa*l < 0) || (x+xa*l >= c) || (y+ya*l < 0) || (y+ya*l >= r))
return 0;
while (l) {
if (s[(y = y+ya)][(x = x+xa)] != word[ll])
return 0;
l--; ll++;
}
return 1;
}void find()
{
int i,j,k;
int mink,mini,minj;
mink = 100;
for (i = 0;i < r;i++)
for (j = 0;j < c;j++)
if (s[i][j] == word[0]) {
for (k = 0;k < 8;k++)
if (is_right(j,i,go[k][1],go[k][0])) {
/*printf("%d %d %c\n",i+1,j+1,d[k]);
return; 这是之前的版本,由于轻信题目描述,导致错误*/
if (k < mink) {
mink = k; mini = i; minj = j;
}
break;
}
}
printf("%d %d %c\n",mini+1,minj+1,d[mink]);
}void init()
{
int i;
scanf("%d%d%d",&r,&c,&w);
for (i = 0;i < r;i++)
scanf("%s",s[i]);
} -
-114 年前@
题目描述与数据不一致,同一个字符串可能会出现多次。
还有,要注意字符串为一个字符的情况。 -
-114 年前@
肥轩最傻逼
-
-114 年前@
CK0123傻逼
-
-112 年前@
只需在字母矩阵中找出这个单词的首字母的位置,便向8个方向在矩阵中寻找判断是否可以组成这个单词,如果可以,便判断是否可以更优(优先级嘛~~)
本以为只可以过几个点,想不到AC喇.编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms -
-114 年前@
把原矩阵在八个方向按优先级转换成很多个字符串,然后每读一个单词按顺序KMP。
180行!
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
- 1