题解 | 明日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")
SHEIN希音公司福利 292人发布