AcWing 3223-csp6(2). 消除类游戏
原题链接
简单
作者:
YAX_AC
,
2024-11-17 11:28:40
,
所有人可见
,
阅读 2
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 30;
int n,m;
int g[N][N],st[N][N];
//判断一个格子能不能消除,分别算出上下左右四个方向,与该格子相同的最多到什么地方
//如果横方向上,或者竖方向上连续相同格子>=3,那么该格子可以删除,否则不可以删除
int main()
{
cin>>n>>m;
for(int i = 0; i<n; i++)
for(int j = 0; j<m; j++)
cin>>g[i][j];
//判断每个格子是否可以删掉
for(int i = 0; i<n; i++)
{
for(int j = 0; j<m; j++)
{
int l = j,r = j,u = i,d = i,x = g[i][j];
while(l>=0 && g[i][l]==x) l--;//l往左走
while(r<m && g[i][r]==x) r++;//r往右走
while(u>=0 && g[u][j]==x) u--;//u往上走
while(d<n && g[d][j]==x) d++;//d往下走
st[i][j] = r-l-1>=3 || d-u-1>=3;
}
}
for(int i = 0; i<n; i++)
{
for(int j = 0; j<m; j++)
{
if(st[i][j]==1) cout<<0<<' ';
else cout<<g[i][j]<<' ';
}
cout<<endl;
}
return 0;
}