Description

有一个外星人控制了你的大脑。一开始你处于原点(0,0)。外星人有一个由(R,U,D,L)组成的长度为M 的操作序列,分别代表(右,上,下,左)。
平面上有N 个关键点,每当外星人给出一个操作,你需要在这个方向上找到最近的一个关键点,并走到那个点上。保证输入数据合法。

上图为第三个样例的图示。

Input

第一行两个整数N,M。
接下来N 行,每行两个整数xi,yi,代表第i 个点的坐标。
接下来一行,一个长度为M 的字符串,代表操作序列。

Output

一行两个整数,代表最终你所处的位置。

Sample Input

输入1:

4 4
1 1
1 0
0 1
0 0
RULD

输入2:

7 5
0 0
0 1
0 -1
1 0
1 -1
3 0
3 -1
DRRUD

输入3:

10 6
0 0
1 1
2 1
0 2
-1 2
-1 3
2 3
2 4
4 3
2 -1
ULURDL

Sample Output

输出1:

0 0

输出2:

3 -1

输出3:

1 1

Data Constraint

56%的数据,N≤3000,M≤3000。
100%的数据,N,M≤100000,xi,yi≤200000。

Solution

  • 这题的操作数比较少,可以直接模拟行动路径。

  • 但坐标的值较大,可以考虑使用离散化。

  • 懒惰的我将坐标值都加了200000,存到一个 Vector 容器里。

  • 排序后,在里面二分查找下一个坐标的位置即可。

  • 时间复杂度为 O(NlogN)O(NlogN) 。

Code

#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
const int M=200005;
vector<int>f[M<<1];
vector<int>g[M<<1];
inline int read()
{int X=0,w=1; char ch=0;while(ch<'0' || ch>'9') {if(ch=='-') w=-1;ch=getchar();}while(ch>='0' && ch<='9') X=(X<<3)+(X<<1)+ch-'0',ch=getchar();return X*w;
}
int main()
{int n=read(),m=read();for(int i=1;i<=n;i++){int x=read()+M,y=read()+M;f[x].push_back(y);g[y].push_back(x);}for(int i=1;i<(M<<1);i++){if(!f[i].empty()) sort(f[i].begin(),f[i].end());if(!g[i].empty()) sort(g[i].begin(),g[i].end());}int x=M,y=M;while(m--){char ch=getchar();while(ch!='R' && ch!='U' && ch!='D' && ch!='L') ch=getchar();if(ch=='L' || ch=='R'){if(ch=='R'){int l=0,r=g[y].size()-1;while(l<r){int mid=(l+r)>>1;if(g[y][mid]<=x) l=mid+1; else r=mid;}x=g[y][l];}else{int l=0,r=g[y].size()-1;while(l<r){int mid=(l+r)>>1;if(g[y][mid]<x) l=mid+1; else r=mid;}if(g[y][l]==x) l--;x=g[y][l];}}else{if(ch=='U'){int l=0,r=f[x].size()-1;while(l<r){int mid=(l+r)>>1;if(f[x][mid]<=y) l=mid+1; else r=mid;}y=f[x][l];}else{int l=0,r=f[x].size()-1;while(l<r){int mid=(l+r)>>1;if(f[x][mid]<y) l=mid+1; else r=mid;}if(f[x][l]==y) l--;y=f[x][l];}}}printf("%d %d",x-M,y-M);return 0;
}

JZOJ 5234. 【NOIP2017模拟8.7A组】外星人的路径相关推荐

  1. JZOJ.5234【NOIP2017模拟8.7】外星人的路径

    Description 有一个外星人控制了你的大脑.一开始你处于原点(0,0).外星人有一个由(R,U,D,L)组成的长度为M 的操作序列,分别代表(右,上,下,左). 平面上有N 个关键点,每当外星 ...

  2. jzoj5234. 【NOIP2017模拟8.7A组】外星人的路径

    Description 有一个外星人控制了你的大脑.一开始你处于原点(0,0).外星人有一个由(R,U,D,L)组成的长度为M 的操作序列,分别代表(右,上,下,左). 平面上有N 个关键点,每当外星 ...

  3. JZOJ 5236. 【NOIP2017模拟8.7A组】利普希茨

    Description Input 输入文件名为lipschitz.in. 第一行一个整数n. 接下来一行n个整数,描述序列A. 第三行一个数q . 接下来q行,每行三个整数.其中第一个整数type表 ...

  4. [jzoj5236]【NOIP2017模拟8.7A组】利普希茨

    这道像数据结构的结论题传送门 我觉得这断不能怪我 一上来给出操作种类和 LogLog 形式的数据范围有如套路一般 Solution 60p 容易想到分治 对于整个序列,可以割作三份,分界点为最大值和最 ...

  5. 利普希茨【NOIP2017模拟8.7A组】

    题目 Input 输入文件名为lipschitz.in. 第一行一个整数n. 接下来一行n个整数,描述序列A. 第三行一个数q . 接下来q行,每行三个整数.其中第一个整数type表示操作的类型. t ...

  6. jzoj5236. 【NOIP2017模拟8.7A组】利普希茨

    Description Input 输入文件名为lipschitz.in. 第一行一个整数n. 接下来一行n个整数,描述序列A. 第三行一个数q . 接下来q行,每行三个整数.其中第一个整数type表 ...

  7. JZOJ 5956. 【NOIP2018模拟11.7A组】easy LCA

    Description Input Output 输出一行一个整数,表示所求的所有连续子段的权值和. Sample Input 6 1 2 2 6 6 3 3 4 6 5 1 2 3 4 5 6 Sa ...

  8. JZOJ 5344. 【NOIP2017模拟9.3A组】摘果子

    Description Input Output Sample Input 7 9 39 6 13 2 22 6 7 4 -19 5 28 6 -17 1 2 1 3 2 4 1 5 4 6 2 7 ...

  9. JZOJ 5264. 【NOIP2017模拟8.12A组】化学

    Description Input Output Sample Input 3 10 1 2 10 Sample Output 5 Data Constraint Hint Solution 看到数据 ...

最新文章

  1. Unity “出圈”:游戏引擎的技术革新和跨界商机
  2. 用java开发一个Hello Word系统内核
  3. pytorch笔记: 处理inf和nan数值
  4. 【LeetCode笔记】148. 排序链表(Java、归并排序、快慢指针、双重递归)
  5. 迷你世界无人驾驶地铁火车_出口伊斯坦布尔地铁列车“云下线”
  6. 学习日报 7-10(验证码)
  7. Linux内存管理:ARM64体系结构与编程之cache(2):cache一致性
  8. 程序员面试金典——5.3最接近的数
  9. 如何让ClickOnce进行手动更新(含代码)
  10. Openresty 学习笔记(二)Nginx Lua 正则表达式相关API
  11. psim扰动观察法编程c语言,基于PSIM的新型扰动观察法的MPPT仿真研究
  12. 寻找春天nbsp;九宫格日记-2011.09.20
  13. jsencrypt php,js加密php解密(一)
  14. 山下英子(日)《断舍离》读书笔记
  15. 社会保险费的缴费基数与缴费比例
  16. 游戏视觉内容逆向破解
  17. #1992. 购票(ticket)
  18. STC15单片机实战项目 - 项目需求
  19. Word中令人头疼的字体转换
  20. ActiveMQ--基础

热门文章

  1. ”语义分割”中的“语义”
  2. loss=nan解决办法
  3. [云炬创业基础笔记]第七张创业团队测试8
  4. 科大星云诗社动态20201205
  5. 科大星云诗社动态20210319
  6. [一维粒子模拟 version3.6]实现initial.m函数
  7. [MATLAB调试笔记]Update magnetic field in one step
  8. 你所不知道的 Transformer!
  9. 给C#开发者的代码审查清单
  10. 大型项目开发,你准备好了吗?