【GYM-100889 C】Chunin Exam【左右手路径问题】
题意:
一道交互题,输入想要走的方向,系统返回是否可走,实现从 (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【左右手路径问题】相关推荐
- Gym - 100917F Find the Length-用最小路径树求最小环
https://codeforces.com/gym/100917/problem/F 题目大意:就给你一个无向图,求出所有点属于的最小环大小. 思路:我们给每一个点用dji求出最小路径树,然后对于一 ...
- Gym 100134L - Labyrinth of the Minotaur
题目来源:http://codeforces.com/gym/100134/attachments 题意:给一个迷宫,问是否存在一种方案,可以用一个正方形块,堵住从左上到右下的所有路径,输出坐标及正方 ...
- Gym-100889B Backward and Forward
题目链接:http://codeforces.com/gym/100889/problem/B B. Backward and Forward time limit per test 2.0 s me ...
- XP 风格的可拖动列、可排序、可改变宽度的DataGrid的例子
利用客户端脚本的优势,我们可以创建出可以拖动列,改变列宽度,显示.隐藏列的XP风格的 DataGrid,下面就是所有的代码.自己调试时请注意修改eMeng.Exam.UltraGrid路径. 查看例子 ...
- 有用的收藏!javascript/c#/asp.net
今天有朋友问我关于用JAVASCRIPT来进行页面各表单之间的数据传递的问题,我以前也写过,不过从来没有注意,今天总结了一下,希望能够给大家一些帮助,也帮助我总结以前学过,用过的知识. 一,最简单的就 ...
- 3808: Neerc2012 Labyrinth of the Minotaur
题目大意:给你一个n*m的格子,有些格子有障碍,要你找到一个最小的正方形格子,使得这个正方形没有覆盖障碍且去掉这个正方形后(1,1)与(n,m)就不连通了 n<=1500 m<=1500 ...
- 硬件 TCP/IP 协议栈(SPI 发送命令字)
目录 全硬件的TCP/IP 协议栈简介 以太网接入单片机方案 以太网接口芯片CH395Q 简介 以太网接口芯片 CH395Q 命令简介 以太网接口芯片CH395Q 寄存器配置与使用 移植CH395Q ...
- 反向图——dj算法(判断从起点 开始有没有第二条路径能到达)Gym 102501K
Gym 102501K BirdwatchingGym 102501K 题意:题目比较难读,就是给你一个t点 找到所有 i->t的i点 没有第二条路径到达t点. 思路:反向图 跑dj算法,但是要 ...
- Gym - 101986F Pizza Delivery (最短路必经路径)
题意:给你一个有向图,每一条边在第i天都会反向,问反向后的最短路是否有变化.每次反向都是独立的. 解题思路:我们先把起点到所有点的最短路求出来,然后把所有边反向,然后求终点到所有点的最短路. 这样我们 ...
- ROS(1和2)机器人操作系统相关书籍、资料和学习路径
ROS机器人相关书籍与资料(更新日期2017年11月) ROS发展10年了,已经逐渐成为通用的机器人操作系统标准.ROS 2相关资料链接:http://blog.csdn.net/zhangrelay ...
最新文章
- 字符串相乘(大数相乘)
- python format函数保留两位小数_python format函数
- 第9章 项目人力资源管理
- leetcode实践:通过链表存储两数之和
- 深度学习的推荐模型(DLRMs):设计孪生掩码层高效学习维度自适应的Embedding...
- ABP:在多语句事务内不允许使用 CREATE DATABASE 语句
- Oracle 创建函数
- 1200兆路由器网速_1200m路由器有必要吗 只要我们选择5GHz频段就可
- 爬虫BeautifulSoup库学习-小猪短租网
- 基于MATLAB视频的人体姿态检测
- vue3.0 H5页面配置 Autoprefixer 报警Replace Autoprefixer browsers option to Browserslist config.
- 修复0xc0000034的经历
- 计算机里被删除的文件可以在哪里进行恢复,电脑里的文件夹不小心删除了找回来的方法...
- Linux上的Shebang符号(#!)
- 整理10类Java毕设练手项目,献给帅帅的计算计专业毕业人
- 求asinx+bcosx的不定积分
- 能够找一个计算机好的人把六级成绩改一下吗,六级成绩查询
- 达梦数据库TPCC测试记录
- Django中DateField与DateTimeField的特殊参数auto_add_now和auto_now
- Resolving Recurrence
热门文章
- LeetCode - Duplicate Emails
- CentOS 5 常见的configure error的解决方法
- nod32 update and id
- OpenCV-图像处理(31、图像矩(Image Moments))
- vb2008 获取mac地址_华为 荣耀路由Pro 设置MAC地址克隆的方法?华为荣耀路由器怎么设置...
- java arraylist 字符串数组_java中String,数组,ArrayList三者之间的转换
- 区间dp讲解之石子合并问题 区间dp的分析方法
- 【算法笔记】初识离散化
- STM32——库函数版——ADXL345驱动程序
- c++ 写ftp服务器文件,C++实现的FTP服务器