题意:

     给你一个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. 关于PHP的__construct()函数

    1 <?php 2 header("Content-Type:text/html;charset=utf-8");//调整为utf-8编码格式 3 class car 4 { ...

  2. Kilo 使用教程

    写了这么多篇 WireGuard 相关的保姆教程,今天终于牵扯到 Kubernetes 了,不然怎么对得起"云原生"这三个字.如果看到这篇文章的你仍然是个 WireGuard 新手 ...

  3. C++高精度计算(大整数类)

    Java和Pathon可以不用往下看了 C++的基本数据类型中,范围最大的数据类型不同编译器不同,但是最大的整数范围只有[-2^63-2^63-1](对应8个字节所对应的二进制数大小).但是对于某些需 ...

  4. ASP.NET Core扩展库之日志

        上一篇我们对Xfrogcn.AspNetCore.Extensions扩展库功能进行了简单的介绍,从这一篇文章开始,我将逐步介绍扩展库中的核心功能.     日志作为非业务的通用领域基础功能, ...

  5. synchronized中锁是怎么升级的

    在JDK1.6以前,使用synchronized就只有一种方式即重量级锁,而在JDK1.6以后,引入了偏向锁,轻量级锁,重量级锁,来减少竞争带来的上下文切换. 锁升级主要依赖对象头中的Mark Wor ...

  6. [SDOI2009] HH的项链(待续)

    [SDOI2009] HH的项链(待续) 题目大意:对一个由若干个数字(可重复)组成的数列,询问\([l,r]\)中出现的不同的数字数量 考试时(考试时范围小)用的暴力,but,没有考虑数字0的情况, ...

  7. 《数据持久化与鸿蒙的分布式数据管理能力》直播课答疑和PPT分享

    问:hi3861开发板支持分布式数据库吗? 目前,分布式数据库仅支持Java接口,因此Hi3861没有现成的API用于操作分布式数据库. 问:分布式数据管理包括搜索吗? 分布式数据管理包括融合搜索能力 ...

  8. 前端学习 node 快速入门 系列 —— 服务端渲染

    其他章节请看: 前端学习 node 快速入门 系列 服务端渲染 在简易版 Apache一文中,我们用 node 做了一个简单的服务器,能提供静态资源访问的能力. 对于真正的网站,页面中的数据应该来自服 ...

  9. 走进docker-初识

    什么是Docker容器? 容器是打包代码及其所有依赖项的软件的标准单元,因此应用程序可以从一个计算环境快速可靠地运行到另一个计算环境.Docker容器映像是一个轻量级的,独立的,可执行的软件软件包,其 ...

  10. ch1_6_7求解数字排序问题

    import java.util.Arrays; import java.util.Comparator; import java.util.HashMap; import java.util.Sca ...