Week12 CSP-M3 B - Gym 270437N
思路:
暴力搜索即可,先搜行,再搜列,需要消除的就打标记,最后按标记输出,有标记就输出0,没标记就正常输出
每一个点最多会被访问四次,最少被访问两次,上限复杂度O(4*N*M)
代码:
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int G[35][35];
int G2[35][35];
int main()
{
int N,M; cin>>N>>M;
for(int i=1;i<=N;i++)
for(int j=1;j<=M;j++)
scanf("%d",&G[i][j]);
//搜行
for(int i=1;i<=N;i++)
{
for(int l=1;l<=M;l++)
{
int r=0;
for(r=l;r<=M;r++)
{
if(G[i][l]!=G[i][r]) break;
}
if(r-l>=3) //形成了连续的三个
{
for(int k=l;k<=r-1;k++)
G2[i][k]=1;
}
}
}
//搜列
for(int i=1;i<=M;i++)
{
for(int l=1;l<=N;l++)
{
int r=0;
for(r=l;r<=M;r++)
{
if(G[l][i]!=G[r][i]) break;
}
if(r-l>=3) //形成了连续的三个
{
for(int k=l;k<=r-1;k++)
G2[k][i]=1;
}
}
}
//输出
for(int i=1;i<=N;i++)
{
for(int j=1;j<=M;j++)
{
if(G2[i][j]==1) printf(j==1 ? "0" : " 0");
else printf(j==1 ? "%d" : " %d",G[i][j]);
}
printf("\n");
}
return 0;
}

浙公网安备 33010602011771号