1 条题解
-
0
自动搬运
来自洛谷,原作者为

cxq2002
**搬运于
2025-08-24 21:59:59,当前版本为作者最后更新于2018-08-25 22:26:21,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
#简单的枚举 注意: 翻转九十度,五种俄罗斯方块有不同情况。 图一无变化。 图二,图三和图四有两种变化。 图五有四种变化。 但是数据水,可以else直接过,不需要考虑。
直接存在数组中,从头到尾扫描一遍。
#include<bits/stdc++.h> using namespace std; char s[11][11]; int sum[6],n,m,i,j; void remove(int x,int y) { char c=s[x][y]; s[x][y]='.'; if(s[x-1][y]==c) remove(x-1,y); if(s[x+1][y]==c) remove(x+1,y); if(s[x][y-1]==c) remove(x,y-1); if(s[x][y+1]==c) remove(x,y+1); } int check(int x,int y) { char c=s[x][y]; if(s[x+1][y]==c&&s[x+1][y+1]==c&&s[x][y+1]==c) return 1; if((s[x][y+1]==c&&s[x][y+2]==c&&s[x][y+3]==c)||(s[x+1][y]==c&&s[x+2][y]==c&&s[x+3][y]==c)) return 2; if((s[x][y+1]==c&&s[x+1][y]==c&&s[x+1][y-1]==c)||(s[x+1][y]==c&&s[x+1][y+1]==c&&s[x+2][y+1]==c)) return 3; if((s[x][y+1]==c&&s[x+1][y+1]==c&&s[x+1][y+2]==c)||(s[x+1][y]==c&&s[x+1][y-1]==c&&s[x+2][y-1]==c)) return 4; else return 5; } int main() { cin>>n>>m; for(i=1;i<=n;i++) for(j=1;j<=m;j++) cin>>s[i][j]; for(i=1;i<=n;i++) for(j=1;j<=m;j++) if(s[i][j]!='.') { sum[check(i,j)]++; remove(i,j); } for(i=1;i<=5;i++) cout<<sum[i]<<endl; return 0; }```
- 1
信息
- ID
- 3392
- 时间
- 1000ms
- 内存
- 63MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者