当前位置: 首页 > news >正文

Robot Queries

题目传送门

前置知识——向量的加减

\((x_1,y_1) \pm (x_2,y_2) = (x_1\pm x_2,y_1\pm y_2)\)

满足交换律和结合律。

题目大意

有一个在 \((0,0)\) 的点。现在给出 \(n\) 个操作序列 \({f}\),每个指令形如 \((x, y) \gets \left\{\begin{matrix}(x \pm 1, y) \\(x, y \pm 1)\end{matrix}\right.\)。现在又有 \(q\) 个互相独立的询问,每个询问为反转 \(a_l\sim a_r\),给出 \((x, y)\) 是否被点经过。

思路

一、操作序列等价于一组向量:\(\{(\pm 1,0),(0,\pm 1)\}\)。对于每一个询问,等价于询问反转后的操作序列 \({b}\) 是否有 \((x, y) = \sum_{i - 1}^n b_i\)。设 \(a_i = \sum_{j=1}^i f_j\)

二、由向量加法满足交换律容易得到 \(\forall p\in[1,l)\cup[r,n], a_p \text{不变}\)。所以其中一种合法情况为 \(a_i\) 等于 \((x, y)\)\(\forall p\in[1,l)\cup[r,n]\)

三、由找规律可得,反转一段区间等价于将这一段的路径 \(\{b\}\) 旋转 \(180^{\circ}\) 再把 \({b}\) 的起点平移到 \(a_{l-1}\)。所以另外一种合法情况为 \(a_{l - 1} + a_r - (x, y) = b_p\)\(\forall p \in [l, r)\)

实现

使用一个 map<PII, vector<int>> mp 维护 \(b = a_i\)\(i\)。对于第一种情况,直接判断 mp[{x, y}] 中是否有 \(p\in[1,l)\cup[r,n]\) 即可。对于第二种情况,判断 mp[add(add(re(p), a[l - 1]), a[r])] 中是否有 \(p\in[l,r)\) 即可。判断可以使用二分。

code

#include <bits/stdc++.h>#pragma GCC optimize("Ofast")#define int long longusing namespace std;const int N = 2e5 + 5;using PII = pair<int, int>;int n, q, x, y, l, r;
PII a[N];
map<PII, vector<int>> mp;PII add(PII x, PII y) {return {x.first + y.first, x.second + y.second};
}
PII re(PII x) {return {-x.first, -x.second};
}
bool check(vector<int> &v, int l, int r) {auto it = lower_bound(v.begin(), v.end(), l);if (it == v.end()) return false;return *it <= r;
}signed main() {cin.tie(0)->sync_with_stdio(0);cin >> n >> q;mp[{0, 0}].push_back(0);for (int i = 1; i <= n; i ++ ) {char ch;    cin >> ch;if (ch == 'U') {a[i] = {a[i - 1].first, a[i - 1].second + 1};} else if (ch == 'D') {a[i] = {a[i - 1].first, a[i - 1].second - 1};} else if (ch == 'L') {a[i] = {a[i - 1].first - 1, a[i - 1].second};} else {a[i] = {a[i - 1].first + 1, a[i - 1].second};}mp[a[i]].push_back(i);}while (q -- ) {cin >> x >> y >> l >> r;PII p = {x, y};if (mp.count(p) && (check(mp[p], 0, l - 1) || check(mp[p], r, n))) {cout << "YES\n";continue;}PII finded = add(add(re(p), a[l - 1]), a[r]);if (mp.count(finded) && check(mp[finded], l, r - 1)) {cout << "YES\n";continue;}cout << "NO\n";}return 0;
}
http://www.fuzeviewer.com/news/414/

相关文章:

  • 【CI130x 离在线】如何运行 curl 脚本
  • 这才是真正的AI NAS!极空间私有云Z2Ultra评测
  • 新东方第三节课名言作文
  • 十月阅读_3
  • 中考_体育
  • 常见问题处理 --- phpstudy启动mysql失败
  • 20232308 2025-2026-1 《网络与系统攻防技术》实验三实验报告
  • 【密码学实战】openHiTLS PKCS12命令行程序: PKCS12文件生成与解析
  • 「CTSC2017-游戏」题解
  • vue3 vue3-form-element表单生成工具 输入框增加后缀
  • 20232402 2025-2026-1 《网络与系统攻防技术》实验三实验报告
  • 掘金2025年:数字化商业浪潮下,如何选对平台与伙伴?一站式多商户商城系统推荐榜发布,多商户商城代理招募/多商户项目合伙人加盟/一站式开店代理项目加盟
  • 为医疗器械行业搭建“数字桥梁”,破解协同效率与合规难题
  • PostgreSQL 服务版
  • 20232307 2025-2026-1 《网络与系统攻防技术》实验三实验报告
  • 2025年10月办公家具公司评价榜:基于真实数据的权威推荐清单
  • vue+antv/x6项目使用问题
  • 《程序员修炼之道:从小工到专家》前五分之一观后感
  • 坐标系与投影关系
  • 用gdb的动态视角看ret2text的实现
  • 1027随笔
  • ask_skill
  • SVN 主分支合并之通过主分支合并子分支执行流程
  • 现代c++编程体验2
  • 化繁为简:解密国标GB28181算法算力平台EasyGBS如何以兼容性与易用性赋能安防集成
  • 计算机毕业设计springboot音乐畅听系统 基于Spring Boot框架的智能音乐播放系统编写 Spring Boot驱动的音乐在线欣赏平台构建
  • vue2 封装组件使用 v-mode【el-radio,el-input】
  • P11993 [JOIST 2025] 迁移计划 题解
  • ERP和CRM、SRM、MES之间的关系,怎么理解?
  • 2025年市面上氟碳铝单板品牌、市场氟碳铝单板公司、国内氟碳铝单板生产厂家、2025年氟碳铝单板品牌、口碑好的氟碳铝单板产品综合评测