CCF-CSP-2015-12-2消除类游戏
链接:http://118.190.20.162/view.page?gpid=T36
注意事项:纵向遍历时注意;
思路:
思路1:把有能够消除的坐标进行加入map标记,这样横纵消除互不影响;
思路2:把能够消除的坐标值标为负数,这样横纵不影响对比,输出也方便判断。
代码:
#include<bits/stdc++.h>
using namespace std;
map<pair<int,int>,int>mp;
int a[50][50];
int main (){
int n,m;
cin>>n>>m;
int atm=-1,ans=0;
for(int i=0;i<n;i++){
atm=-1;ans=0;
for(int j=0;j<m;j++){
cin>>a[i][j];
if(a[i][j]==atm){
ans++;
if(ans==3){
mp[make_pair(i,j-1)]=1;
mp[make_pair(i,j-2)]=1;
mp[make_pair(i,j)]=1;
}
else if(ans>3)mp[make_pair(i,j)]=1;
}
else {
atm=a[i][j];
ans=1;
}
}
}
for(int i=0;i<m;i++){
atm=-1;ans=0;
for(int j=0;j<n;j++){
if(a[j][i]==atm){
ans++;
if(ans==3){
mp[make_pair(j,i)]=1;
mp[make_pair(j-1,i)]=1;
mp[make_pair(j-2,i)]=1;
}
else if(ans>3){
mp[make_pair(j,i)]=1;
}
}
else {
atm=a[j][i];
ans=1;
}
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(mp[make_pair(i,j)])cout<<0<<" ";
else cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}

浙公网安备 33010602011771号