一、问题链接
CSP 201512-2 消除类游戏
二、思路
模拟 注意:指定vector的??时,要稍微大一些,若仅仅指定N * M,会造成运行时错误。
三、参考代码
#include<bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int n, m;
cin>>n>>m;
vector<vector<int>> a(n+10,vector<int>(m+10));
vector<vector<int>> b(n+10,vector<int>(m+10));
vector<vector<int>> c(n+10,vector<int>(m+10));
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++) {
cin>>a[i][j];
b[i][j]=a[i][j];
c[i][j]=a[i][j];
}
}
int count,first,last;
for(int i=0; i<n; i++) {
for(int j=0; j<m-1; j++) {
count = 1;
first=a[i][j];
last=a[i][j+1];
while(first==last) {
count++;
if(j<m-1) j++;
else break;
last=a[i][j+1];
}
if(count>=3) {
for(int k=0; k<count; k++) {
b[i][j-k]=0;
}
}
}
}
for(int j=0; j<m; j++) {
for(int i=0; i<n-1; i++) {
count = 1;
first=a[i][j];
last=a[i+1][j];
while(first==last) {
count++;
if(i<n-1) i++;
else break;
last=a[i+1][j];
}
if(count>=3) {
for(int k=0; k<count; k++) {
c[i-k][j]=0;
}
}
}
}
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++) {
(b[i][j]==0 || c[i][j]==0) ? cout<<"0" : cout<<a[i][j];
cout<<" ";
}
cout<<"\n";
}
return 0;
}
|