ABC335 C - Loong Tracking 题解

ABC335 C - Loong Tracking

TAG: STL,模拟

APPRAIS:STL 的巧用

前置知识

  1. deque 可以下标 O(1) 访问。
  2. deque 可以删除队尾队首元素,在队尾队首插入元素。

First. 修改

设 deque 中第 i 个元素表示部件 i 的位置。

每次修改,即在队首插入 1 接下来会走到的点,然后删除 n 原来的位置。

这样,原本 i 的位置就赋给了 i+1,也就实现了题目中所说的:i 部分 (2iN) 移动到部件 i1 移动前的坐标位置。1 也移至了新的位置。

Second. 查询

直接访问 deque 中第 x 个位置即可。

Code

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int , int> pi;
const int N = 1e6 + 10;
int n , q;
pi p[N];

signed main() {
    ios::sync_with_stdio(0);
    cin >> n >> q;
    deque<pi> que;
    for (int i = 1; i <= n; i++) {
        que.push_back({ i, 0 });
    }
    while (q--) {
        int opt , id;
        char arr;
        cin >> opt;
        if (opt == 1) {
            cin >> arr;
            if (arr == 'L') {
                pi pos = que.front();
                pos.first--;
                que.pop_back();
                que.push_front(pos);
            } else if (arr == 'R') {
                pi pos = que.front();
                pos.first++;
                que.pop_back();
                que.push_front(pos);
            } else if (arr == 'U') {
                pi pos = que.front();
                pos.second ++;
                que.pop_back();
                que.push_front(pos);
            } else {
                pi pos = que.front();
                pos.second --;
                que.pop_back();
                que.push_front(pos);
            }
        } else {
            cin >> id;
            cout << que[id - 1].first << ' ' << que[id - 1].second << endl; // 注意deque 以 0 为起始编号
        }
    }
    return 0;
}
posted @   固态H2O  阅读(27)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示