CCF真题
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<climits>
#include<cstdbool>
#include<cmath>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
vector<vector<int>>chess(n,vector<int>(m));
vector<vector<int>>up(n,vector<int>(m));
vector<vector<int>>left(n,vector<int>(m));
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
{
cin>>chess[i][j];
up[i][j]=left[i][j]=1;
if(i>0&&chess[i-1][j]==chess[i][j])
up[i][j]=up[i-1][j]+1;
if(j>0&&chess[i][j-1]==chess[i][j])
left[i][j]=left[i][j-1]+1;
}
}
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
{
if(up[i][j]>=3)
{
for(int k=0; k<up[i][j]; k++)
chess[i-k][j]=0;
}
if(left[i][j]>=3)
{
for(int k=0; k<left[i][j]; k++)
chess[i][j-k]=0;
}
}
}
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
cout<<chess[i][j]<<" ";
cout<<endl;
}
return 0;
}
使用两个二维数组来统计每一行每一列的相同字符出现的次数,再二次扫描。