[CCF CSP]201512-2 消除类游戏
CSP-2就是常规的简单模拟题,开始思路跑偏了只消除了数到的大于2的位置,后来把每块连续的位置标成一个颜色再消除才正确
#include<bits/stdc++.h> using namespace std; int n,m; int a[33][33],vis[33][33]; int b[33],c[33],t[33]; int main() { cin>>n>>m; for(int i=0;i<n;i++) for(int j=0;j<m;j++) cin>>a[i][j]; for(int i=0;i<n;i++) { b[0]=c[0]=0; memset(t,0,sizeof(t)); for(int j=1;j<m;j++) { if(a[i][j]==a[i][j-1]) { b[j]=b[j-1]+1; c[j]=c[j-1]; if(b[j]>=2) t[c[j]]=1; } else b[j]=0,c[j]=c[j-1]+1; } for(int j=0;j<m;j++) if(t[c[j]]) vis[i][j]=1; } for(int j=0;j<m;j++) { b[0]=c[0]=0; memset(t,0,sizeof(t)); for(int i=1;i<n;i++) { if(a[i][j]==a[i-1][j]) { b[i]=b[i-1]+1; c[i]=c[i-1]; if(b[i]>=2) t[c[i]]=1; } else b[i]=0,c[i]=c[i-1]+1; } for(int i=0;i<n;i++) if(t[c[i]]) vis[i][j]=1; } for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { if(vis[i][j]) cout<<0<<' '; else cout<<a[i][j]<<' '; } cout<<endl; } return 0; }