#include <bits/stdc++.h>
using namespace std;
using ll = long long;
deque<pair<int,int>> snake;
bool moveSnake(int dir) {
// TODO: 请实现移动逻辑
for(int i=0;i<snake.size()-1;i++){
snake[i].first=snake[i+1].first;
snake[i].second=snake[i+1].second;
}
switch (dir) {
case 1:
snake.back().second++;
break;
case 2:
snake.back().second--;
break;
case 3:
snake.back().first--;
break;
case 4:
snake.back().first++;
break;
}
for(int i=0;i<snake.size()-1;i++){
if(snake[i].first==snake.back().first&&snake[i].second==snake.back().second){
return true;
}
}
return false;
}
bool eatSnake(int dir) {
// TODO: 请实现吃果子生长逻辑
int x=snake.front().first;
int y=snake.front().second;
for(int i=0;i<snake.size()-1;i++){
snake[i].first=snake[i+1].first;
snake[i].second=snake[i+1].second;
}
switch (dir) {
case 1:
snake.back().second++;
break;
case 2:
snake.back().second--;
break;
case 3:
snake.back().first--;
break;
case 4:
snake.back().first++;
break;
}
snake.insert(snake.begin(),{x,y});
for(int i=0;i<snake.size()-1;i++){
if(snake[i].first==snake.back().first&&snake[i].second==snake.back().second){
return true;
}
}
return false;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, q;
cin >> n >> q;
snake.clear();
for (int i = 0; i < n; i++) {
int x, y;
cin >> x >> y;
snake.emplace_back(x, y);
}
for (int i = 0; i < q; i++) {
int op, dir;
cin >> op >> dir;
bool collision = (op == 1 ? moveSnake(dir) : eatSnake(dir));
if (collision) {
cout << -1 << '\n';
return 0;
} else {
for (auto it = snake.rbegin(); it != snake.rend(); ++it) {
cout << it->first << ' ' << it->second << '\n';
}
}
}
return 0;
}
不知道为什么放在哈希表这一块

京公网安备 11010502036488号