D题求问

#include <bits/stdc++.h>

using namespace std;

const int N =1e3+10;

int xx[]={0,-1,0,1};

int yy[]={1,0,-1,0};

bool check(vector<vector<int>>mp,int n,int m){

bool flag=false;

for(int i=0;i<n;i++){

for(int j=0;j<n;j++){

if(mp[i][j]==0){

int ans=0;

for(int k=0;k<4;k++){

int dx=i+xx[k],dy=j+yy[k];

if(dx<1||dx>n||dy<1||dy>m)continue;

if(mp[dx][dy]==1){

ans++;

}

}

if(ans==4)flag=true;

}

}

}

return flag;

}

void solve(vector<vector<int>>mp,int n,int m){

int sum=0;

int num_x[N],num_y[N];

memset(num_x,0,sizeof(num_x));

memset(num_y,0,sizeof(num_y));

for(int i=0;i<n;i++){

for(int j=0;j<m;j++){

if(mp[i][j]==1){

num_x[i]++;

num_y[j]++;

sum++;

}

}

}

int num_row_x=0,num_col_y=0;

for(int i=0;i<n;i++){

if(num_x[i]==m)num_row_x++;

}

for(int i=0;i<m;i++){

if(num_y[i]==n)num_col_y++;

}

bool ok = check(mp,n,m);

//这里存在问题

if(sum==0||(num_row_x==2&&sum==2*m)||(num_col_y==2&&sum==2*n)||ok){

//注意题目中 还说 可能操作同一行

cout<<"YES"<<endl;

}

else cout<<"NO"<<endl;

}

int main() {

int t;

cin >> t;

while (t--) {

int n, m;

cin >> n >> m;

vector<vector<int>> mp(N, vector<int>(N,0));

for (int i = 0; i < n; i++) {

string s;

cin >> s;

for (int j = 0; j < s.size(); j++) {

mp[i][j] = s[j] - '0';

}

}

solve(mp,n,m);

}

return 0;

}

为什么只能通过百分之15的样例

全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 13:05
点赞 评论 收藏
分享
好想摆:一想到我苦苦追求的迪子私下里却是985的马子,我的心就在滴血😭😭😭
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
今天 12:20
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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