[算法练习] UVA-10010-Where's Waldorf?
UVA Online Judge 题目10010 Where's Waldorf? Waldorf在哪?
问题描述:
给出一个m行n列的字符矩阵(
),和一个单词列表,在矩阵上匹配每个单词。在矩阵上匹配单词包含八个方向(上、下、左、右、左上、左下、右上、右下),单词匹配成功后输出第一个字符的坐标。
输入格式:
第一行是一个整数,表示案例的个数。第二行是一个空行,每个案例的输入前都有一个空行。
第三行是第一个案例的m和n,
,表示接下来的矩阵有m行n列。接下来m行是矩阵的数据。
矩阵数据输入完之后是一个整数,表示该次案例需要匹配的单词个数k(
),接下来k行既是k个单词。
输出格式:
针对每一个需要搜索的单词匹配成功后输出首字母的坐标,同一列有多个位置匹配成功则输出最靠上方的,同一行有多个位置匹配成功的则输出最靠左的一个(也就是说:我们只需要按列循环匹配,列内从小到大匹配即可)。
注意:每个例子中间需要间隔一行,最后一个例子后面没有空行。
示例输入:
abcDEFGhigg
hEbkWalDork
FtyAwaldORm
FtsimrLqsrc
byoArBeDeyv
Klcbqwikomk
strEBGadhrb
yUiqlxcnBjf Waldorf
Bambi
Betty
Dagbert
示例输出:
代码:(局部变量覆盖上一层变量WA了一次。。)
/*
Problem : UVA Online Judge - 10010 Where's Waldorf?
Date:2014-04-03
Author:Leroy
*/ #include <stdio.h>
#include <string.h>
#include <ctype.h> char grid[][]; void findWord(int m, int n, char* str)
{
int len = strlen(str);
int x, y; for (x = ; x < m; x++)
{
for (y = ; y < n; y++)
{
if (grid[x][y] == str[])
{
for (int ix = -; ix <= ; ix++)
{
for (int iy = -; iy <= ; iy++)
{
if (!(ix == && iy == ))
{
int c = ;
for (; c < len; c++)
{
int cx = x + ix*c;
int cy = y + iy*c;
if (cx< || cy< || cx>(m-) || cy>(n-))
break;
if (grid[cx][cy] != str[c])
break;
}
if (c == len)
{
printf("%d %d\n", x+, y+);
return;
}
}
}
}
}
}
} } int main(){
int num;
scanf("%d", &num); for (int i = ; i < num; i++)
{
int m, n;
scanf("%d %d", &m, &n);
for (int j = ; j < m; j++)
{
scanf("%s", grid[j]);
for (int k = ; k < n; k++)
{
grid[j][k] = toupper(grid[j][k]);
}
} int wn;
char word[];
scanf("%d", &wn);
for (int j = ; j < wn; j++)
{
scanf("%s", word);
int k = ;
while (word[k] != '\0')
{
word[k] = toupper(word[k]);
k++;
}
findWord(m, n, word);
} if (i != num - )
printf("\n");
} return ;
}
[算法练习] UVA-10010-Where's Waldorf?的更多相关文章
- RMQ算法 以及UVA 11235 Frequent Values(RMQ)
RMQ算法 简单来说,RMQ算法是给定一组数据,求取区间[l,r]内的最大或最小值. 例如一组任意数据 5 6 8 1 3 11 45 78 59 66 4,求取区间(1,8) 内的最大值.数据量小 ...
- [算法练习] UVA 10420 - List of Conquests?
UVA Online Judge 题目10420 - List of Conquests 问题描述: 题目很简单,给出一个出席宴会的人员列表,包括国籍和姓名(姓名完全没用).统计每个国家有多少人参加, ...
- 【KM算法】UVA 11383 Golden Tiger Claw
题目大意 给你一个\(n×n\)的矩阵G,每个位置有一个权,求两个一维数组\(row\)和\(col\),使\(row[i] + col[j]\ge G[i][j]\),并且\(∑row+∑col\) ...
- (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO
http://www.cnblogs.com/sxiszero/p/3618737.html 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年 ...
- 算法竞赛入门经典+挑战编程+USACO
下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinej ...
- UVA题目分类
题目 Volume 0. Getting Started 开始10055 - Hashmat the Brave Warrior 10071 - Back to High School Physics ...
- 刘汝佳 算法竞赛-入门经典 第二部分 算法篇 第五章 1(String)
第一题:401 - Palindromes UVA : http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8 ...
- ACM训练计划step 1 [非原创]
(Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成 ...
- UVA 10245 The Closest Pair Problem 最近点问题 分治算法
题意,给出n个点的坐标,找出两点间最近的距离,如果小于10000就输出INFINITY. 纯暴力是会超时的,所以得另辟蹊径,用分治算法. 递归思路将点按坐标排序后,分成两块处理,最近的距离不是在两块中 ...
随机推荐
- #JAVA操作LDAP
package com.wisdombud.unicom.monitor.ldap; import java.util.ArrayList; import org.slf4j.Logger; impo ...
- BestCoder Round #65 hdu5590(水题)
ZYB's Biology Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)T ...
- HDU 3666 THE MATRIX PROBLEM (差分约束)
题意:给定一个最大400*400的矩阵,每次操作可以将某一行或某一列乘上一个数,问能否通过这样的操作使得矩阵内的每个数都在[L,R]的区间内. 析:再把题意说明白一点就是是否存在ai,bj,使得l&l ...
- 神经网络学习-问题(二)-scipy未正确安装报DLL找不到的问题
问题如下: E:\project\DL\python\keras>python keras_sample.pyUsing Theano backend.Traceback (most recen ...
- cocos2d-x CCScale9Sprite
转自:http://www.cocos2dev.com/?p=295 前段时间看CCEditBox的时候,发现里面有个利用9宫格图缩放图片的,也就是缩放带圆角的图片. 这个比较有用处,很多游戏中有很多 ...
- UVa Online Judge 工具網站
UVa Online Judge 工具網站 UVa中译题uHuntAlgorithmist Lucky貓的ACM園地,Lucky貓的 ACM 中譯題目 Mirror UVa Online Judg ...
- 数据恢复软件使用经验-支持U盘,手机SD卡,硬盘数据,解决图片恢复后打不开的问题
数据恢复软件使用经验-支持U盘,手机SD卡,硬盘数据.解决图片恢复后打不开的问题. 用过非常多数据恢复软件.最早EasyRecovery pro.恢复过U盘.手机SD卡,硬盘数据.但如今下载不了最新版 ...
- STL 案例分析
#include <iostream> using namespace std; #include "string" #include <vector> # ...
- java_线程-锁
package com.demo.test3; import java.util.concurrent.CountDownLatch; /** * @author QQ: 1236897 * */ / ...
- Java中数组的快排
描述输入三个字符(可以重复)后,按各字符的ASCII码从小到大的顺序输出这三个字符. 输入 第一行输入一个数N,表示有N组测试数据.后面的N行输入多组数据,每组输入数据都是占一行,有三个字符组成, ...