87人过2人,地狱难度。 放眼望去,满江红……

5 条评论

  • @ 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
            上传者