- 棋盘覆盖问题(chessboard)
关于本域最难之题……
- @ 2022-7-15 15:49:17
87人过2人,地狱难度。 放眼望去,满江红……
5 条评论
-
bjwjc LV 2 @ 2026-4-17 21:28:53#include <bits/stdc++.h> using namespace std; int a[512][512], k, x, y, t2 = 1; void f(int tr, int tc, int dr, int dc, int size) { if (size == 1) return; int t = t2 ++; int s = size / 2; if (dr < tr + s && dc < tc + s) f(tr, tc, dr, dc, s); else a[tr + s - 1][tc + s - 1] = t, f(tr, tc, tr + s - 1, tc + s - 1, s); if (dr < tr + s && dc >= tc + s) f(tr, tc + s, dr, dc, s); else a[tr + s - 1][tc + s] = t, f(tr, tc + s, tr + s - 1, tc + s, s); if (dr >= tr + s && dc < tc + s) f(tr + s, tc, dr, dc, s); else a[tr + s][tc + s - 1] = t, f(tr + s, tc, tr + s, tc + s - 1, s); if (dr >= tr + s && dc >= tc + s) f(tr + s, tc + s, dr, dc, s); else a[tr + s][tc + s] = t, f(tr + s, tc + s, tr + s, tc + s, s); } int main() { cin >> k >> x >> y; for (int i = 0; i < k; ++ i) for (int j = 0; j < k; ++ j) a[i][j] = 0; int dr = x - 1; int dc = y - 1; if (dr < 0) dr = 0; if (dc < 0) dc = 0; if (dr >= k) dr = k - 1; if (dc >= k) dc = k - 1; a[dr][dc] = 0; f(0, 0, dr, dc, k); for (int i = 0; i < k; ++ i) { for (int j = 0; j < k; ++ j) cout << setw(5) << a[i][j]; cout << endl; } return 0; } -
@ 2025-9-7 13:42:30
#include <iostream> #include <iomanip> using namespace std; int board[65][65], tile; /* tile为纸片编号 */ void chessboard( int tr, int tc, int dr, int dc, int size ) /* dr,dc依次为特殊方格的行、列号 */ { int t, s; if ( size == 1 ) return ; t = tile++; s = size / 2; if ((dr<tr+s)&&(dc<tc+s) / dr<tr+s&&dc<tc+s ) chessboard( tr, tc, dr, dc, s ); else{ board[tr + s -1][tc + s -1] = t; chessboard(tr,tc,tr+s-1,tc+s-1,s); } if ( dr < tr + s && dc >= tc + s ) chessboard( tr, tc + s, dr, dc, s ); else{ board[tr + s -1][tc + s] = t; chessboard(tr,tc+s,tr+s-1,tc+s,s); } if ( dr >= tr + s && dc < tc + s ) chessboard( tr + s, tc, dr, dc, s ); else{ board[tr + s][tc + s -1] = t; chessboard(tr+s,tc,tr+s,tc+s-1,s); } if ( dr >= tr + s && dc >= tc + s ) chessboard( tr + s, tc + s, dr, dc, s ); else{ board[tr + s][tc + s] = t; chessboard(tr+s,tc+s,tr+s,tc+s,s); } } void prtl( int b[][65], int n ) { int i, j; for ( i =1; i <= n; i++ ) { for ( j =1; j <= n; j++ ) if(b[i][j]!=-1)cout<< b[i][j]<<' '; else cout<<0<<' '; cout << endl; } } int main() { int size, dr, dc; cin >> size; cin >> dr >> dc; board[dr][dc] = -1; tile++; chessboard( 1, 1, dr, dc, size ); prtl( board, size ); return 0; } -
@ 2024-9-16 16:28:04%%%
-
@ 2022-7-29 18:47:28
zys直接切了/jk
-
@ 2022-7-23 19:18:48黑,必须黑/kk
- 1
信息
- ID
- 88
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- (无)
- 递交数
- 164
- 已通过
- 21
- 上传者