题解 | 明日DISCO

明日DISCO

https://www.nowcoder.com/practice/5f28e16c1c934fa9bfd78d80292e99d5

首先这个题我们并不需要真的去修改这个方阵,因为我们注意到边界都是0,那么我们一定要保证所有的元素最后都可以,注意是可以,变成0.

那么我们就考虑什么时候一个非0的元素可以变为0,其实就是对于这个元素的四个方向,每个方向的元素与该元素的乘积都要小于等于0就可以,因为如果异号的话,这个元素就有足够大的空间可以去进行放大或缩小。



#include <vector>
#include <iostream>
#include <utility>
using namespace std;
vector<pair<int,int>>dirs={{0,1},{0,-1},{1,0},{-1,0}};

int main() {
    int n;cin>>n;
    vector<vector<int>>v(n+2,vector<int>(n+2,0));
    for (int i = 1;i <= n;i++){
        for (int j = 1;j <= n;j++){
            cin>>v[i][j];
        }
    }
    // 显然是不会呀,当然也不太想做了
    // 感觉最近完全睡不着觉真的要累死了,不过
    // 当且仅当四个方位都是0才能变成0
    for (int i = 1;i <= n;i++)
        for (int j = 1;j <= n;j++)
            for (auto &[x,y]:dirs){
                if (v[i][j] < 0){
                    if (v[i+x][j+y] <0) {cout<<"NO";return 0;}
                }else if(v[i][j] >0){
                    if (v[i+x][j+y] > 0){cout<<"NO";return 0;}
                }
            }
    cout<<"YES";            
    return 0;    
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

2025-12-09 18:13
湖南大学 运营
点赞 评论 收藏
分享
2025-12-22 15:25
南京工业大学 运营
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务