这一次终极被吊打 甚至没进前十 T2 最后改错 T3 没写正解
T1 elim
题目大意:
n 行 m 列的游戏棋盘,一行或一列上有连续 三个或更多的相同颜色的棋子时,这些棋子都被消除
当有多处可以被消除时,这些地方的棋子将同时被消除 求消除后的棋盘
思路:
sb模拟
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cstdlib> 5 #include<cmath> 6 #include<algorithm> 7 #include<queue> 8 #include<vector> 9 #include<map> 10 #define inf 2139062143 11 #define ll long long 12 #define MAXN 510 13 using namespace std; 14 inline int read() 15 { 16 int x=0,f=1;char ch=getchar(); 17 while(!isdigit(ch)) {if(ch=='-')f=-1;ch=getchar();} 18 while(isdigit(ch)) {x=x*10+ch-'0';ch=getchar();} 19 return x*f; 20 } 21 //yyc score=0 22 int n,m,mp[40][40],ans[40][40]; 23 int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1}; 24 inline int ok(int x,int y) {return x&&y&&x<=n&&y<=m;} 25 void work(int x,int y) 26 { 27 for(int i=0;i<4;i++) 28 { 29 for(int j=1;j<=2;j++) 30 if(mp[x][y]!=mp[x+dx[i]*j][y+dy[i]*j]||!ok(x+dx[i]*j,y+dy[i]*j)) goto cont; 31 for(int j=0;j<=2;j++) 32 ans[x+dx[i]*j][y+dy[i]*j]=0; 33 cont:; 34 } 35 } 36 int main() 37 { 38 freopen("elim.in","r",stdin); 39 freopen("elim.out","w",stdout); 40 n=read(),m=read(); 41 for(int i=1;i<=n;i++) 42 for(int j=1;j<=m;j++) ans[i][j]=mp[i][j]=read(); 43 for(int i=1;i<=n;i++) 44 for(int j=1;j<=m;j++) work(i,j); 45 for(int i=1;i<=n;i++,puts("")) 46 for(int j=1;j<=m;j++) printf("%d ",ans[i][j]); 47 }