社区讨论
求条
P13711 [NWERC 2023] Lateral Damage参与者 14已保存回复 14
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 14 条
- 当前快照
- 1 份
- 快照标识符
- @mhjh54rx
- 此快照首次捕获于
- 2025/11/04 02:29 4 个月前
- 此快照最后确认于
- 2025/11/04 06:18 4 个月前
CPP
#include <iostream>
#include <set>
using namespace std;
int n, k;
set<pair<int, int>> s;
set<pair<int, int>> h;
int sk;
bool sn[101][101];
void fs(int x, int y) {
if (x < 1 || x > n || y < 1 || y > n) return;
if (s.count({x, y})) return;
cout << x << " " << y << endl;
s.insert({x, y});
string r;
cin >> r;
if (r == "hit") {
h.insert({x, y});
int dx[] = {0, 1, 0, -1};
int dy[] = {1, 0, -1, 0};
for (int i = 0; i < 4; ++i) {
int nx = x + dx[i];
int ny = y + dy[i];
if (nx >= 1 && nx <= n && ny >= 1 && ny <= n && !s.count({nx, ny})) {
cout << nx << " " << ny << endl;
s.insert({nx, ny});
string r2;
cin >> r2;
if (r2 == "hit") {
h.insert({nx, ny});
int st = 1;
while (true) {
int tx = x + st * dx[i];
int ty = y + st * dy[i];
if (tx < 1 || tx > n || ty < 1 || ty > n) break;
if (s.count({tx, ty})) break;
cout << tx << " " << ty << endl;
s.insert({tx, ty});
string r3;
cin >> r3;
if (r3 == "hit") {
h.insert({tx, ty});
st++;
} else if (r3 == "sunk") {
h.insert({tx, ty});
sk++;
break;
} else break;
}
st = -1;
while (true) {
int tx = x + st * dx[i];
int ty = y + st * dy[i];
if (tx < 1 || tx > n || ty < 1 || ty > n) break;
if (s.count({tx, ty})) break;
cout << tx << " " << ty << endl;
s.insert({tx, ty});
string r3;
cin >> r3;
if (r3 == "hit") {
h.insert({tx, ty});
st--;
} else if (r3 == "sunk") {
h.insert({tx, ty});
sk++;
break;
} else break;
}
return;
}
}
}
} else if (r == "sunk") {
h.insert({x, y});
sk++;
}
}
int main() {
cin >> n >> k;
for (int i = 1; i <= n && sk < k; ++i) {
for (int j = 1; j <= n && sk < k; ++j) {
fs(i, j);
}
}
return 0;
}
回复
共 14 条回复,欢迎继续交流。
正在加载回复...