基本情况
ABD秒了,C卡了一会,空间换时间然后爆内存,最后交了个100多行的逆天模拟终于+4过。
赛后发现其实是手写了双端队列。
C - Loong Tracking
思路很明显,空间换时间,把每个状态用数组全记录下来。
但是纯这样写数组会开的巨大,所以得让后面没用的状态出去。
用双端队列来实现就贼直接。
void solve()
{
cin >> n >> Q;
pair<int, int> move[200];
move['R'] = make_pair(1, 0);move['L'] = make_pair(-1, 0);
move['U'] = make_pair(0, 1);move['D'] = make_pair(0, -1);
deque<pair<int, int> > q;
for (int i = 1; i <= n; i++) q.push_back({i, 0});
int x = 1, y = 0;
while(Q--)
{
int opt; cin >> opt;
if (opt == 1)
{
char c; cin >> c;
q.pop_back();
x += move[c].first, y += move[c].second;
q.push_front({x, y});
}
else
{
int x;
cin >> x;
cout << q[x - 1].first << ' ' << q[x - 1].second << '\n';
}
}
}