1 条题解

  • 0
    @ 2025-9-2 17:48:06

    总体思路:对每一个'.'的上下左右四个方向进行查询有没有'#',有的话答案加一,没有的话遍历下一个'.' #include<bits/stdc++.h> using namespace std; int main() { //DBS为上下左右四个方向 int DBS[4][2]={{0,-1},{0,1},{-1,0},{1,0}}; int n; int ans=0; cin>>n;

    //输入
    vector<vector<char>>memo(n,vector<char>(n));
    for(int i=0;i<n;i++)
    
    {
        for(int j=0;j<n;j++)
        {
            cin>>memo[i][j];
        }
    }
    
    
    
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            if(memo[i][j]=='.')
            {
            //解包,遍历DBS,将DBS[i][0]赋值给dx,DBS[i][1]赋值给dy,一共四次,实现上下左右的移动
                for(auto[dx,dy]:DBS)
                {
                
                    int x=i+dx,y=j+dy;
                    //如果移动后没有越界,且找到了'#',答案加一
                    if(x>=0&&x<n&&y>=0&&y<n&&memo[x][y]=='#')
                    {
                      
                        ans++;
                        //跳出,防止一个'.'附近有多个'#'答案错误
                        break;
                    }
                }
            }
        }
    }
    cout<<ans<<endl;
    return 0;
    

    }

    信息

    ID
    200
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    递交数
    13
    已通过
    5
    上传者