n×n 棋盤,給定棋子位置('o')、被攻擊位置('x')、安全位置('.')。所有棋子移動向量相同。求一組合法移動向量集合,或判定無解。輸出 (2n-1)×(2n-1) 圖示(中心為棋子,'x' 為可攻擊)。
pieces。(dx,dy) 使得對每個棋子 (x,y),若 (x+dx, y+dy) 在盤內,則該位置必須是 'x'(不能是 '.')。即:向量不能導致攻擊到安全格。S。S 模擬所有棋子攻擊,生成攻擊圖,與輸入 'x'/'o' 比較(忽略 'o' 位置是否被攻擊)。完全匹配則有解,輸出 S 的圖示;否則 NO。int n; vector board;
vector> pieces;
bool valid[100][100] = {}; // 向量偏移 +n 偏移
int main() {
cin >> n;
board.resize(n);
for (int i=0;i> board[i];
for (int j=0;j sim(n, string(n, '.'));
for (auto [x,y] : pieces) {
for (int dx = -(n-1); dx <= n-1; ++dx)
for (int dy = -(n-1); dy <= n-1; ++dy)
if (valid[dx+n][dy+n]) {
int nx=x+dx, ny=y+dy;
if (0<=nx&&nx
(2n-1)²,n≤50 時僅 9801,暴力枚舉極快。