2 条题解

  • 0
    @ 2026-6-19 10:30:07

    📝 题目大意

    给定一个 H×WH \times W 的网格,求格子 (R,C)(R, C) 的上下左右四个方向中,有多少个格子仍然在网格内部(即存在边相邻的格子)。

    💡 解题思路

    1. 题目分析H,W10H, W \leq 10,数据量极小,但题目本质是判断四个方向是否越界,与数据范围无关。核心在于:一个格子 (R,C)(R, C) 的边相邻格子只有四个候选项——上 (R1,C)(R-1, C)、下 (R+1,C)(R+1, C)、左 (R,C1)(R, C-1)、右 (R,C+1)(R, C+1),只需逐一检查是否满足 1H1 \leq 行 \leq H1W1 \leq 列 \leq W

    2. 算法推导:在 std.cpp 中,n=H,m=W,x=R,y=Cn=H, m=W, x=R, y=C,用 ans 计数:

      • 上:x>1x > 1 时,说明上方还有格子(行号大于 11),ans++
      • 左:y>1y > 1 时,说明左侧还有格子(列号大于 11),ans++
      • 下:xn1x \leq n-1(即 x<nx < n)时,说明下方还有格子(行号小于 HH),ans++
      • 右:ym1y \leq m-1(即 y<my < m)时,说明右侧还有格子(列号小于 WW),ans++
    3. 边界与细节

      • 角点:(1,1)(1, 1) 只有右和下两个邻居,答案为 22;若 H=1,W=1H=1, W=1,答案为 00
      • 边缘:若 H=1H=1W=1W=1(即网格退化为一条线),则上下或左右方向必然缺失,符合样例 4~6 的情况。
      • 注意 x <= n-1 的写法等价于 x < n,用 <= 是为了避免 < 写成 > 的笔误,两种写法均可。

    ⏱️ 复杂度分析

    • 时间复杂度O(1)O(1),仅进行四次条件判断。
    • 空间复杂度O(1)O(1),只使用常数个变量。

    💻 标准代码 (C++)

    #include<iostream>
    using namespace std;
    int main () 
    {
    	int n, m, x, y;
    	cin >> n >> m >> x >> y;   // n=H行, m=W列, x=R行号, y=C列号
    	int ans = 0;                // 符合条件的相邻格子数
    	if (x > 1) {                // 上方有格子(不在第一行)
    		ans++;
    	}
    	if (y > 1) {                // 左侧有格子(不在第一列)
    		ans++;
    	}
    	if (x <= n - 1) {           // 下方有格子(不在最后一行,等价于 x < n)
    		ans++;
    	}
    	if (y <= m - 1) {           // 右侧有格子(不在最后一列,等价于 y < m)
    		ans++;
    	}
    	cout << ans << endl;
    	return 0;
    }
    
    • 0
      @ 2026-6-12 22:57:29
      #include<bits/stdc++.h>
      using namespace std;
      int a,b,c,d,s;
      int main(){
      	cin>>a>>b;
      	cin>>c>>d;
      	for(int i=1;i<=a;i++)for(int j=1;j<=b;j++){
      		if(abs(i-c)+abs(j-d)==1)s++;
      	}
      	cout<<s;
      	return 0;
       } 
      
      
      • 1

      信息

      ID
      596
      时间
      1000ms
      内存
      256MiB
      难度
      10
      标签
      (无)
      递交数
      6
      已通过
      3
      上传者