首页 > 其他分享 >CF1902D Robot Queries 题解

CF1902D Robot Queries 题解

时间:2023-12-19 11:55:26浏览次数:37  
标签:sy sx CF1902D int 题解 make Robot MAXN pair

题意:有一个二维平面直角坐标系,给定一串向某个方向移动 \(1\) 个单位的操作。

有 \(q\) 个询问,对于每个询问给定 \(x,y,l,r\),问如果倒着做 \(l\) 到 \(r\) 这段区间中的操作,是否会经过 \((x,y)\)。

ds 题。先预处理出 \(sx_i,sy_i\) 表示执行完操作 \(i\) 后的位置,如果在 \([l,r]\) 区间外已经经过 \((x,y)\) 了,那么最终也一定会经过。再考虑 \([l,r]\) 区间内,我们会发现,如果正序执行操作时会到达 \((nx,ny)\) 的话,那么倒序执行操作时一定会经过 \((sx_{l-1}+sx_r-nx,sy_{l-1}+sy_r-ny)\)。所以只需要查询区间内是否存在一个坐标即可。可以线段树,这里用的离线 vector + map。

#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef pair <int,int> pii;
map <pii,int> f,s,mp;
const int MAXN = 2e5 + 10;
int n,q,x,y,l,r,sx[MAXN],sy[MAXN],ans[MAXN];
struct Node{int i,l,x,y;};
vector <Node> a[MAXN];
char c[MAXN];
signed main()
{
	cin >> n >> q >> (c + 1);
	for(int i = 1;i <= n;i++)
	{
		sx[i] = sx[i - 1],sy[i] = sy[i - 1];
		if(c[i] == 'R') sx[i]++;
		if(c[i] == 'L') sx[i]--;
		if(c[i] == 'U') sy[i]++;
		if(c[i] == 'D') sy[i]--;
	}
	for(int i = 0;i <= n;i++) f[make_pair(sx[i],sy[i])] = i;
	for(int i = n;i >= 0;i--) s[make_pair(sx[i],sy[i])] = i;
	for(int i = 1;i <= q;i++)
	{
		cin >> x >> y >> l >> r;
		if(f.count(make_pair(x,y)) && f[make_pair(x,y)] >= r) ans[i] = 1;
		if(s.count(make_pair(x,y)) && s[make_pair(x,y)] < l) ans[i] = 1;
		a[r].push_back({i,l,sx[l - 1] + sx[r] - x,sy[l - 1] + sy[r] - y});
	}
	for(int i = 0;i <= n;i++)
	{
		mp[make_pair(sx[i],sy[i])] = i;
		for(int j = 0;j < a[i].size();j++) 
			ans[a[i][j].i] |= mp[make_pair(a[i][j].x,a[i][j].y)] >= a[i][j].l;
	}
	for(int i = 1;i <= q;i++) cout << (ans[i] ? "YES" : "NO") << endl;
	return 0;
} 

标签:sy,sx,CF1902D,int,题解,make,Robot,MAXN,pair
From: https://www.cnblogs.com/Creeperl/p/17913382.html

相关文章

  • 华中师范大学2023新生赛 H 龙 题解
    Link华中师范大学2023新生赛H龙Question有\(m\)个宝石孔,有\(n\)个宝石,每个宝石可以提升\(a_i\)点战斗力每次镶嵌一个宝石,被选中的宝石会随机选择一个宝石孔进去,如果这个孔原来有宝石,则原来的宝石会被损坏你可以任意决定镶嵌宝石的顺序,她想知道,如果把着\(n\)颗宝......
  • 华中师范大学2023新生赛 D 身无彩凤双飞翼 题解
    Link华中师范大学2023新生赛D身无彩凤双飞翼Question给出一个\(n\timesm\)的网格,网格上有一些障碍,问最少添加多少障碍才能使\((1,1)\)和\((n,m)\)不连通Solution我好像用了一种和标答不一样的写法我们先对图bfs一次,如果\((1,1)\)不能到达\((n,m)\),则图本来就......
  • CF1905 B Begginer's Zelda 题解
    LinkCF1905BBegginer'sZeldaQuestion给出一棵树,每次能把一条路径压缩成一个点,求最少几次把树压缩成一个点Solution贪心的想,路径肯定越长越好,所以肯定是以一个儿子节点为起点,以一个儿子节点为终点,儿子节点合并了儿子到根的父节点也合并了,每次合并两个儿子节点,假设儿子节点......
  • 【题解】CodeForces-1913
    CodeForces-1913ARatingIncrease依题意模拟。提交记录:Submission-CodeForcesCodeForces-1913BSwapandDelete交换免费就是能任意重排,从头开始尽量填相反的,剩下只能删去了。提交记录:Submission-CodeForcesCodeForces-1913CGamewithMultiset从大到小能减则减一定......
  • 【题解】CodeForces-1905
    CodeForces-1905AConstructiveProblems发现沿着对角线放就行了,答案是\(\max(n+m)\)。提交记录:Submission-CodeForcesCodeForces-1905BBegginer'sZelda最优操作每次删两个叶子(除了最后一次只剩两个节点),所以答案是叶子个数除以二上取整。提交记录:Submission-CodeForc......
  • Java面向对象程序设计(上海交通大学出版社)12章及以后的课后问题解析
    1)Map集合和Collection集合的区别是什么? Map集合和Collection集合都是Java集合框架中的接口,它们之间有一些关键的区别:元素存储方式:Collection:用于存储单一元素的集合接口。它继承自Iterable接口,包含常见的子接口如List、Set。Map:用于存储键值对(key-value......
  • Cesium开发遇到的问题解决
    问题1:后台缓存收回进程无法释放上下文[/BUSINESS的缓存的[10]%-请考虑增加缓存的最大大小。原因:出现该问题是Tomcat启动时,占用的缓存较大,Tomcat默认的缓存是10000KB.解决:需要调整Tomcat目录下\conf\context.xml文件中的缓存的最大值,需要添加在<Context></Context>标签内,添加项如......
  • 题解 LGP7294【[USACO21JAN] Minimum Cost Paths P】/ accoders::NOI 5696【棋子】
    problemFarmerJohn的牧草地可以看作是一个\(N×M\)(\(2≤N≤10^9,2≤M≤2⋅10^5\))的正方形方格组成的二维方阵(想象一个巨大的棋盘)。对于\(x∈[1,N],y∈[1,M]\),从上往下第\(x\)行、从左往右第\(y\)列的方格记为\((x,y)\)。此外,对于每一个\(y∈[1,M]\),第\(y\)列拥有一个......
  • JOISC2020题解
    \(\text{ByDaiRuiChen007}\)ContestLinkA.Building4ProblemLink题目大意给\(2n\)个数对\((a_i,b_i)\),构造一个非降序列\(c_i\)满足\(\forall1\lei\len,c_i\in\{a_i,b_i\}\),且\(c_i=a_i\)的位置恰好有\(n\)个。数据范围:\(n\le5\times10^5\)。思路......
  • boost beast http::read 一直阻塞不返回,问题解决, 使用parser对象的skip(true) 来解
    用beast作为客户端发送http请求后读web服务端返回的数据,遇到了http::read或http::async_read一直阻塞着,不返回,直到连接过期后被强制网络断开后read函数才返回。看了官方文档,文档里这么描述的,read要一直等到end_of_stream时才回退出阻塞状态。也就是连接失效后才行。但我们的......