题意:

一道交互题,输入想要走的方向,系统返回是否可走,实现从 (1,1)(1,1)(1,1) 走到 (N,M)(N,M)(N,M)。询问次数不能超过 12∗P+4∗(N+M)12 * P + 4 * (N + M)12 ∗ P + 4 ∗ (N + M),PPP 是栅栏总数。


思路:

在迷宫中如何找到一条必定可行的路径。此处涉及到了一个左右手路径的知识点,即不断左手或右手扶墙,必能从起点到达终点。

因此此题只要按照左手路径的方向依次询问是否可走,即可走到终点。

令方向为上右下左的顺序,如果是左手路径,则每次优先走左手位于的方向,再按照顺时针依次循环过来。如果是右手路径,则每次优先走右手位于的方向,再按照逆时针依次循环过来。循环过来的意思就是指当左手方向不可走时,接下来方向的优先级依次是怎样的,具体可以看看代码。

对于单个左/右手路径来说,该路径一定能到达终点,而且是所有可行路径中最靠上/下的路径,两条路径一定不会交叉。因此之前还有一道题考的是,在迷宫中放入一个最小多大面积的矩形块,可以让起点无法到达终点,而此题就是主要考虑左右手路径的距离最小的位置。


代码:

#include <bits/stdc++.h>
#define __ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
#define rep(i,a,b) for(int i = a; i <= b; i++)
#define LOG1(x1,x2) cout << x1 << ": " << x2 << endl;
#define LOG2(x1,x2,y1,y2) cout << x1 << ": " << x2 << " , " << y1 << ": " << y2 << endl;
#define LOG3(x1,x2,y1,y2,z1,z2) cout << x1 << ": " << x2 << " , " << y1 << ": " << y2 << " , " << z1 << ": " << z2 << endl;
typedef long long ll;
typedef double db;
const int N = 1e5+100;
const int M = 1e5+100;
const db EPS = 1e-9;
using namespace std;//左手路径, 优先序循环为顺时针, 第一个优先选择为前一个方位
//右手路径, 优先序循环为逆时针, 第一个优先选择为后一个方位
string choice[4] = {"UP","RIGHT","DOWN","LEFT"},op;
int now = 2;int main()
{//右手路径, 初始 now = "DOWN"while(1){rep(i,0,3){string next = choice[(now-i+5)%4];cout << "LOOK " << next << endl;cin >> op;if(op == "SAFE"){cout << "GO " << next << endl;cin >> op;now = (now-i+5)%4;if(op == "YES") exit(0);break;}}}//左手路径, 初始 now = "RIGHT"// while(1){//    rep(i,0,3){//       string next = choice[(now+i+3)%4];//         cout << "LOOK " << next << endl;//      cin >> op;//      if(op == "SAFE"){//             cout << "GO " << next << endl;//            cin >> op;//          now = (now+i+3)%4;//             if(op == "YES") exit(0);//          break;//        }//     }// }return 0;
}

【GYM-100889 C】Chunin Exam【左右手路径问题】相关推荐

  1. Gym - 100917F Find the Length-用最小路径树求最小环

    https://codeforces.com/gym/100917/problem/F 题目大意:就给你一个无向图,求出所有点属于的最小环大小. 思路:我们给每一个点用dji求出最小路径树,然后对于一 ...

  2. Gym 100134L - Labyrinth of the Minotaur

    题目来源:http://codeforces.com/gym/100134/attachments 题意:给一个迷宫,问是否存在一种方案,可以用一个正方形块,堵住从左上到右下的所有路径,输出坐标及正方 ...

  3. Gym-100889B Backward and Forward

    题目链接:http://codeforces.com/gym/100889/problem/B B. Backward and Forward time limit per test 2.0 s me ...

  4. XP 风格的可拖动列、可排序、可改变宽度的DataGrid的例子

    利用客户端脚本的优势,我们可以创建出可以拖动列,改变列宽度,显示.隐藏列的XP风格的 DataGrid,下面就是所有的代码.自己调试时请注意修改eMeng.Exam.UltraGrid路径. 查看例子 ...

  5. 有用的收藏!javascript/c#/asp.net

    今天有朋友问我关于用JAVASCRIPT来进行页面各表单之间的数据传递的问题,我以前也写过,不过从来没有注意,今天总结了一下,希望能够给大家一些帮助,也帮助我总结以前学过,用过的知识. 一,最简单的就 ...

  6. 3808: Neerc2012 Labyrinth of the Minotaur

    题目大意:给你一个n*m的格子,有些格子有障碍,要你找到一个最小的正方形格子,使得这个正方形没有覆盖障碍且去掉这个正方形后(1,1)与(n,m)就不连通了 n<=1500 m<=1500 ...

  7. 硬件 TCP/IP 协议栈(SPI 发送命令字)

    目录 全硬件的TCP/IP 协议栈简介 以太网接入单片机方案 以太网接口芯片CH395Q 简介 以太网接口芯片 CH395Q 命令简介 以太网接口芯片CH395Q 寄存器配置与使用 移植CH395Q ...

  8. 反向图——dj算法(判断从起点 开始有没有第二条路径能到达)Gym 102501K

    Gym 102501K BirdwatchingGym 102501K 题意:题目比较难读,就是给你一个t点 找到所有 i->t的i点 没有第二条路径到达t点. 思路:反向图 跑dj算法,但是要 ...

  9. Gym - 101986F Pizza Delivery (最短路必经路径)

    题意:给你一个有向图,每一条边在第i天都会反向,问反向后的最短路是否有变化.每次反向都是独立的. 解题思路:我们先把起点到所有点的最短路求出来,然后把所有边反向,然后求终点到所有点的最短路. 这样我们 ...

  10. ROS(1和2)机器人操作系统相关书籍、资料和学习路径

    ROS机器人相关书籍与资料(更新日期2017年11月) ROS发展10年了,已经逐渐成为通用的机器人操作系统标准.ROS 2相关资料链接:http://blog.csdn.net/zhangrelay ...

最新文章

  1. 字符串相乘(大数相乘)
  2. python format函数保留两位小数_python format函数
  3. 第9章 项目人力资源管理
  4. leetcode实践:通过链表存储两数之和
  5. 深度学习的推荐模型(DLRMs):设计孪生掩码层高效学习维度自适应的Embedding...
  6. ABP:在多语句事务内不允许使用 CREATE DATABASE 语句
  7. Oracle 创建函数
  8. 1200兆路由器网速_1200m路由器有必要吗 只要我们选择5GHz频段就可
  9. 爬虫BeautifulSoup库学习-小猪短租网
  10. 基于MATLAB视频的人体姿态检测
  11. vue3.0 H5页面配置 Autoprefixer 报警Replace Autoprefixer browsers option to Browserslist config.
  12. 修复0xc0000034的经历
  13. 计算机里被删除的文件可以在哪里进行恢复,电脑里的文件夹不小心删除了找回来的方法...
  14. Linux上的Shebang符号(#!)
  15. 整理10类Java毕设练手项目,献给帅帅的计算计专业毕业人
  16. 求asinx+bcosx的不定积分
  17. 能够找一个计算机好的人把六级成绩改一下吗,六级成绩查询
  18. 达梦数据库TPCC测试记录
  19. Django中DateField与DateTimeField的特殊参数auto_add_now和auto_now
  20. Resolving Recurrence

热门文章

  1. LeetCode - Duplicate Emails
  2. CentOS 5 常见的configure error的解决方法
  3. nod32 update and id
  4. OpenCV-图像处理(31、图像矩(Image Moments))
  5. vb2008 获取mac地址_华为 荣耀路由Pro 设置MAC地址克隆的方法?华为荣耀路由器怎么设置...
  6. java arraylist 字符串数组_java中String,数组,ArrayList三者之间的转换
  7. 区间dp讲解之石子合并问题 区间dp的分析方法
  8. 【算法笔记】初识离散化
  9. STM32——库函数版——ADXL345驱动程序
  10. c++ 写ftp服务器文件,C++实现的FTP服务器