hdu 4740【模拟+深搜】.cpp
题意:
给出老虎的起始点、方向和驴的起始点、方向..
规定老虎和驴都不会走自己走过的方格,并且当没路走的时候,驴会右转,老虎会左转..
当转了一次还没路走就会停下来..
问他们有没有可能在某一格相遇..
思路:
模拟,深搜..
用类似时间戳的东西给方格标记上,表示某一秒正好走到该方格..
最后遍历一下驴在某一格方格标记时间是否和老虎在该格标记的时间一样,一样代表正好做过这里了..
还有一种情况就是老虎或驴一直停在那里,那就算不相等,也是可以的..
Tips:
我一直忘了老虎或驴停下来的情况,这样只要该方格正好是时间戳最后一秒,而且另一个动物走过的时间比停下来那一个动物的最后一秒大就表示一个停下来后和另一个相遇了..
我的方法是两个dfs分别记录下老虎和驴走过的每一秒所到位置..
而网上更快的方法是用一个dfs,计算该秒老虎和驴走到的位置,如果正好相等就相遇了..
这样的话就不必遍历完整个路程,所以时间复杂度比我的低~~~~
Code:
/******************************************
*Author: Griselda
*Created Time: 2013-12-10 22:57
*Filename: 4740.cpp
* ****************************************/
#include <stdio.h>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN = ;
const int INF = 0x1f1f1f1f; int visd[MAXN][MAXN], vist[MAXN][MAXN];
int n, t, d; bool check(int x, int y) {
return x >= && x < n && y >= && y < n;
} void dfsd(int x, int y, int c)
{
if (!check(x, y) || visd[x][y] != -) return;
visd[x][y] = d++;
if (c == ) {
int i;
for (i = y+; i < n; ++i)
if (visd[x][i] == -) {
visd[x][i] = d++;
} else {
dfsd(x+, i-, );
break;
}
if (i == n) dfsd(x+, n-, );
} else if (c == ) {
int i;
for (i = x+; i < n; ++i)
if (visd[i][y] == -) visd[i][y] = d++;
else {
dfsd(i-, y-, );
break;
}
if (i == n) dfsd(n-, y-, );
} else if (c == ) {
int i;
for (i = y-; i >= ; --i)
if (visd[x][i] == -) visd[x][i] = d++;
else {
dfsd(x-, i+, );
break;
}
if (i == -) dfsd(x-, , );
} else {
int i;
for (i = x-; i >= ; --i)
if (visd[i][y] == -) visd[i][y] = d++;
else {
dfsd(i+, y+, );
break;
}
if (i == -) dfsd(, y+, );
}
} void dfst(int x, int y, int c)
{
if (!check(x, y) || vist[x][y] != -) return;
vist[x][y] = t++;
if (c == ) {
int i;
for (i = y+; i < n; ++i)
if (vist[x][i] == -) {
vist[x][i] = t++;
} else {
dfst(x-, i-, );
break;
}
if (i == n) dfst(x-, n-, );
} else if (c == ) {
int i;
for (i = x+; i < n; ++i)
if (vist[i][y] == -) vist[i][y] = t++;
else {
dfst(i-, y+, );
break;
}
if (i == n) dfst(n-, y+, );
} else if (c == ) {
int i;
for (i = y-; i >= ; --i)
if (vist[x][i] == -) vist[x][i] = t++;
else {
dfst(x+, i+, );
break;
}
if (i == -) dfst(x+, , );
} else {
int i;
for (i = x-; i >= ; --i)
if (vist[i][y] == -) vist[i][y] = t++;
else {
dfst(i+, y-, );
break;
}
if (i == -) dfst(, y-, );
}
} int main()
{
//freopen("in.txt", "r", stdin);
//freopen("out1.txt", "w", stdout);
int a, b, c, x, y, z;
int ans, ansx, ansy;
while (~scanf("%d", &n)) {
if (n == ) break;
ans = INF;
memset(visd, 0xff, sizeof(visd));
memset(vist, 0xff, sizeof(vist));
t = d = ;
scanf("%d %d %d", &a, &b, &c);
scanf("%d %d %d", &x, &y, &z);
dfsd(a, b, c);
dfst(x, y, z);
/*
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j)
printf("%3d%c", visd[i][j], j == n-1?'\n':' ');
puts("**********************");
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j)
printf("%3d%c", vist[i][j], j == n-1?'\n':' ');
*/ for (int i = ; i < n; ++i)
for (int j = ; j < n; ++j)
if ((vist[i][j] == visd[i][j] && ans > vist[i][j] && vist[i][j] != -) ||
(vist[i][j] == t- && visd[i][j] > t- ) ||
(visd[i][j] == d- && vist[i][j] > d-)) {
ansx = i, ansy = j;
ans = vist[i][j];
}
if (ans == INF) puts("-1");
else printf("%d %d\n", ansx, ansy);
}
return ;
}
链接:http://acm.hdu.edu.cn/showproblem.php?pid=4740
hdu 4740【模拟+深搜】.cpp的更多相关文章
- HDOJ/HDU 1015 Safecracker(深搜)
Problem Description === Op tech briefing, 2002/11/02 06:42 CST === "The item is locked in a Kle ...
- hdu 1518 Square 深搜,,,,花样剪枝啊!!!
Square Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ...
- Block Breaker HDU - 6699(深搜,水,写下涨涨记性)
Problem Description Given a rectangle frame of size n×m. Initially, the frame is strewn with n×m squ ...
- HDU 2614 Beat 深搜DFS
这道题目还是比较水的,但是题意理解确实费了半天劲,没办法 谁让自己是英渣呢! 题目大意: 猪脚要解决问题, 他有个习惯,每次只解决比之前解决过的问题的难度要大. 他给我们一个矩阵 矩阵的 i 行 j ...
- HDU 4740 模拟题意
九野的博客,转载请注明出处:http://blog.csdn.net/acmmmm/article/details/11711743 题意:驴和老虎在方格中跑,跑的方式:径直跑,若遇到边界或之前走过的 ...
- HDU 6264 (深搜,数论)
题目链接 题意 求\(\sum_{d|n}\phi (d) \times {n\over d}\),其中\(\phi(n) = n\prod_{p|n}({1-{1\over p}})\) 分析 将\ ...
- 深搜基础题目 杭电 HDU 1241
HDU 1241 是深搜算法的入门题目,递归实现. 原题目传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1241 代码仅供参考,c++实现: #incl ...
- HDU 2266 How Many Equations Can You Find(模拟,深搜)
题目 这是传说中的深搜吗....不确定,,,,貌似更加像是模拟,,,, //我要做深搜题目拉 //实际上还是模拟 #include<iostream> #include<string ...
- HDU 4597 Play Game(记忆化搜索,深搜)
题目 //传说中的记忆化搜索,好吧,就是用深搜//多做题吧,,这个解法是搜来的,蛮好理解的 //题目大意:给出两堆牌,只能从最上和最下取,然后两个人轮流取,都按照自己最优的策略,//问说第一个人对多的 ...
随机推荐
- linux环境 :Linux 共享库LIBRARY_PATH, LD_LIBRARY_PATH 与ld.so.conf
参考: 1. Linux 共享库:LD_LIBRARY_PATH 与ld.so.conf Linux环境变量名,该环境变量主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径.(该路径在默 ...
- UVA 2039 Pets(网络流)
Problem Description Are you interested in pets? There is a very famous pets shop in the center of th ...
- QString ini ;转义符
ini如果value字符串中存在:,通过双引号即可转义 [a] b=sdc";"gf
- JavaScript 进阶(二)变量作用域
局部变量陷阱 先看一段代码: function foo() { var a = "hello" b = "world" return a + b; } 这个函数 ...
- 批处理运行python
@echo off cd C:\test start python test.py start python test2.py exit
- 【翻译】ASP.NET Web API是什么?
原文 [翻译]ASP.NET Web API是什么? 说明:随微软ASP.NET MVC 4一起发布的还有一个框架,叫做ASP.NET Web API.目前国内关注这项技术的人似乎还很少,这方面的文章 ...
- MP3文件的结构与编程
有一个朋友喜欢听MP3,为了获取MP3,写了一个程序,专门从一家音乐网站上搜索下载mp3,一下子下载了有上千首.这时朋友又犯愁了,这些MP3的歌曲名字都是使用1,2,3,4,..等数字命名,挑选起来十 ...
- 与众不同 windows phone (15) - Media(媒体)之后台播放音频
原文:与众不同 windows phone (15) - Media(媒体)之后台播放音频 [索引页][源码下载] 与众不同 windows phone (15) - Media(媒体)之后台播放音频 ...
- Win32环境下的程序崩溃异常定位
1 案例描述 作为Windows程序员,平时最担心见到的事情可能就是程序发生了崩溃(异常),这时Windows会提示该程序执行了非法操作,即将关闭.请与您的供应商联系.呵呵,这句微软的“名 ...
- R语言与数据分析之六:时间序列简介
今年在某服装企业蹲点了4个多月,之间非常长一段时间在探索其现货和期货预測.时间序列也是做销售预測的首选,今天和小伙伴分享下时间序列的基本性质和怎样用R来挖据时间序列的相关属性. 首先读入一个时间序列: ...