题解 | 明日DISCO

明日DISCO

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

思路:这题你要发现题目的漏洞,保证所有的数都相等,那么处于0和处于n+1位置的所有数一直是0(也就是棋盘边上的一圈位置一直是0),因为其不能被调整。那么就转换为了将所有数都按照规则转换全部都转换为0即可。要求是比周围都大可以减一,比周围都小加一,但是如果两个相邻数都是正数,那么变换到最后最多就是相等,永远不会减到0,两个相邻的负数也是如此最后加到两个数相等,永远不会为0。那么就要排除这种相邻同号的数,直接两层循环能过遍历判断即可!(数据量比较小哈,暴力枚举就过了),纯纯思维题,一定要考虑负数情况!因为如果相邻两个数异号最后负数部分会加到0或者正数减到0,满足一个数周围都是0,最后操作完这一圈5个数一定都为0!!!细心一点不难哈!

#include<bits/stdc++.h>
using namespace std;
#define int long long

void solve() {
    int n;
    cin >> n;
    vector<vector<int>>a(n + 2, vector<int>(n + 2));
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            cin >> a[i][j];
        }
    }
    bool res = true;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            if (a[i][j] > 0 && (a[i - 1][j] > 0 || a[i][j - 1] > 0 || a[i + 1][j] > 0 ||
                                a[i][j + 1] > 0)) {
                res = false;
            } else if (a[i][j] < 0 && (a[i - 1][j] < 0 || a[i][j - 1] < 0 ||
                                       a[i + 1][j] < 0 || a[i][j + 1] < 0)) {
                res = false;
            }
        }
    }
    cout << (res == true ? "YES" : "NO") << endl;
}

signed main() {
    ios::sync_with_stdio(false), cout.tie(0), cin.tie(0);
    int t = 1;
    while (t--) {
        solve();
    }
    return 0;
}

全部评论

相关推荐

01-12 17:45
门头沟学院 Java
叁六玖:这样的应该钱不多,以前我也被问,我在问他们实习公工资多少,一般都是2200-2800
找实习记录
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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