题意:

     给你一个n*n的图,给你驴和老虎的初始坐标和方向,已知他们的速度相同,他们走动的时候都是走直线,如果不能走,驴往右拐,老虎往左拐,如果拐了一次还走不了就原地不动,问他们的最早相遇位置。

思路:

     直接模拟就行了,我用的是搜索模拟的,不搜索也一样,把他们到达每个格子的时间都记录下来,如果相等或者是A比B大,但是B已经到达终点了,就算相遇,记录的时候记得是要最早的那次相遇就行了。


#include<stdio.h>
#include<string.h> #define N 1100 + 5

int
map_A[N][N] ,map_B[N][N];
int
x1 ,y1 ,x2 ,y2 ,n;
int
dir[4][2] = {0 ,1 ,1 ,0 ,0 ,-1 ,-1 ,0};
bool
ok_A(int x ,int y)
{
if(
x <= n && x >= 1 && y <= n && y >= 1 && !map_A[x][y])
{

x1 = x ,y1 = y;
return
1;
}
return
0;
} bool
ok_B(int x ,int y)
{
if(
x <= n && x >= 1 && y <= n && y >= 1 && !map_B[x][y])
{

x2 = x ,y2 = y;
return
1;
}
return
0;
} void
Dfs_A(int x ,int y ,int t ,int fx)
{
int
nowx = x + dir[fx][0];
int
nowy = y + dir[fx][1];
while(
ok_A(nowx ,nowy))
{

map_A[nowx][nowy] = ++t;
nowx += dir[fx][0];
nowy += dir[fx][1];
}

nowx -= dir[fx][0];
nowy -= dir[fx][1];
nowx += dir[(fx+1)%4][0];
nowy += dir[(fx+1)%4][1];
if(
ok_A(nowx ,nowy))
{

map_A[nowx][nowy] = ++t;
Dfs_A(nowx ,nowy ,t ,(fx+1)%4);
}
} void
Dfs_B(int x ,int y ,int t ,int fx)
{
int
nowx = x + dir[fx][0];
int
nowy = y + dir[fx][1];
while(
ok_B(nowx ,nowy))
{

map_B[nowx][nowy] = ++t;
nowx += dir[fx][0];
nowy += dir[fx][1];
}

nowx -= dir[fx][0];
nowy -= dir[fx][1];
nowx += dir[(fx-1+4)%4][0];
nowy += dir[(fx-1+4)%4][1];
if(
ok_B(nowx ,nowy))
{

map_B[nowx][nowy] = ++t;
Dfs_B(nowx ,nowy ,t ,(fx-1+4)%4);
}
} int main ()
{
int
x11 ,y11 ,d11 ,x22 ,y22 ,d22 ,i ,j;
while(~
scanf("%d" ,&n) && n)
{

scanf("%d %d %d" ,&x11 ,&y11 ,&d11);
scanf("%d %d %d" ,&x22 ,&y22 ,&d22);
x11 ++ ,y11 ++ ,x22 ++ ,y22 ++;
memset(map_A ,0 ,sizeof(map_A));
memset(map_B ,0 ,sizeof(map_B));
map_A[x11][y11] = 1;
x1 = x11 ,y1 = y11;
Dfs_A(x11 ,y11 ,1 ,d11);
map_B[x22][y22] = 1;
x2 = x22 ,y2 = y22;
Dfs_B(x22 ,y22 ,1 ,d22);
int
mk = 0 ,ii ,jj;
for(
i = 1 ;i <= n;i ++)
for(
j = 1 ;j <= n;j ++)
{
if(!
map_A[i][j] || !map_B[i][j])
continue;
if(
map_A[i][j] == map_B[i][j])
{
if(!
mk || mk > map_A[i][j])
{

ii = i ,jj = j ,mk = map_A[i][j];
}
}
if(
map_A[i][j] > map_B[i][j] && i == x2 && j == y2)
{
if(!
mk || mk > map_A[i][j])
{

ii = i ,jj = j ,mk = map_A[i][j];
}
}
if(
map_A[i][j] < map_B[i][j] && i == x1 && j == y1)
{
if(!
mk || mk > map_B[i][j])
{

ii = i ,jj = j ,mk = map_B[i][j];
}
}
}
if(
mk) printf("%d %d\n" ,ii - 1,jj - 1);
else
printf("-1\n");
}
return
0;
}

hdu4740 不错的简单搜索的更多相关文章

  1. 和我一起打造个简单搜索之SpringDataElasticSearch入门

    网上大多通过 java 操作 es 使用的都是 TransportClient,而介绍使用 SpringDataElasticSearch 的文章相对比较少,笔者也是摸索了许久,接下来本文介绍 Spr ...

  2. 和我一起打造个简单搜索之Logstash实时同步建立索引

    用过 Solr 的朋友都知道,Solr 可以直接在配置文件中配置数据库连接从而完成索引的同步创建,但是 ElasticSearch 本身并不具备这样的功能,那如何建立索引呢?方法其实很多,可以使用 J ...

  3. ElasticSearch 5学习(4)——简单搜索笔记

    空搜索: GET /_search hits: total 总数 hits 前10条数据 hits 数组中的每个结果都包含_index._type和文档的_id字段,被加入到_source字段中这意味 ...

  4. nyoj 284 坦克大战 简单搜索

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=284 题意:在一个给定图中,铁墙,河流不可走,砖墙走的话,多花费时间1,问从起点到终点至少 ...

  5. 分布式搜索ElasticSearch构建集群与简单搜索实例应用

    分布式搜索ElasticSearch构建集群与简单搜索实例应用 关于ElasticSearch不介绍了,直接说应用. 分布式ElasticSearch集群构建的方法. 1.通过在程序中创建一个嵌入es ...

  6. solr简单搜索案例

    solr简单搜索案例 使用Solr实现电商网站中商品信息搜索功能,可以根据关键字搜索商品信息,根据商品分类.价格过滤搜索结果,也可以根据价格进行排序,实现分页. 架构分为: 1. solr服务器 2. ...

  7. 和我一起打造个简单搜索之SpringDataElasticSearch关键词高亮

    前面几篇文章详细讲解了 ElasticSearch 的搭建以及使用 SpringDataElasticSearch 来完成搜索查询,但是搜索一般都会有搜索关键字高亮的功能,今天我们把它给加上. 系列文 ...

  8. 和我一起打造个简单搜索之IK分词以及拼音分词

    elasticsearch 官方默认的分词插件,对中文分词效果不理想,它是把中文词语分成了一个一个的汉字.所以我们引入 es 插件 es-ik.同时为了提升用户体验,引入 es-pinyin 插件.本 ...

  9. 和我一起打造个简单搜索之ElasticSearch集群搭建

    我们所常见的电商搜索如京东,搜索页面都会提供各种各样的筛选条件,比如品牌.尺寸.适用季节.价格区间等,同时提供排序,比如价格排序,信誉排序,销量排序等,方便了用户去找到自己心里理想的商品. 站内搜索对 ...

随机推荐

  1. HDu1087 Super Jumping! Jumping! Jumping!

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1087 分析:简单dp:dp[i] = max (dp[i], dp[j] + a[i]) 1 #inc ...

  2. Java-Socket通信 知识点记录

    目录 一.Socket基本案例 二.消息通信 2.1 双向通信 2.2 告知发送结束 2.2.1 通过Socket关闭 2.2.2 通过Socket关闭输出流的方式 2.2.3 通过约定符号 2.2. ...

  3. 盘点Excel中的那些有趣的“bug”

    本文由葡萄城技术团队原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. Excel 1.0早在1985年正式进入市场,距今已经有36年了,虽然在推出 ...

  4. python引用C++ DLL文件若干解释及示例

    python引用C++ DLL文件若干解释及示例 首先说一下,python不支持C++的DLL,但是支持C的DLL:C++因为和C兼容可以编译为C的DLL,这是下面文章的背景与前提 首先我这儿的示例使 ...

  5. PHP配置 3. 配置open_basedir

    open_basedir将网站限定在指定的目录,做目录的隔离 先在php.ini中设置open_basedir: # vim /usr/local/php/etc/php.ini //搜索open_b ...

  6. 攻防世界 reverse 进阶 15-Reversing-x64Elf-100

    15.Reversing-x64Elf-100 这题非常简单, 1 signed __int64 __fastcall sub_4006FD(__int64 a1) 2 { 3 signed int ...

  7. error: failed to push some refs to 'XXX'

    遇到上述无法提交的问题:都是这种命令git push -u origin master造成的 查看github上的提示: 解决:把之前的命令中的master修改成main就好了

  8. 20182217_刘洪宇 后门原理与实践 EXP2

    1.后门概念 后门就是不经过正常认证流程而访问系统的通道. 哪里有后门呢? 编译器留后门 操作系统留后门 最常见的当然还是应用程序中留后门 还有就是潜伏于操作系统中或伪装为特定应用的专用后门程序. - ...

  9. [.net] 关于Exception的几点思考和在项目中的使用(三)

    本文链接: https://www.cnblogs.com/hubaijia/p/about-exceptions-3.html 系列文章: 关于Exception的几点思考和在项目中的使用(一) 关 ...

  10. Dynamics CRM实体系列之字段

    本节开始讲实体中的基础数据存储对象,也就是字段. Dynamics CRM目前总共有13种字段类型,分别为单行文本.选项集.多选选项集.两个选项.图像.整数.浮点数.十进制数.货币.多行文本.日期和时 ...