1 条题解
-
0
C++ :
#include <cstdio> #include <cstring> int n; char g1[55][55], g2[55][55], t[55][55], tmp[55][55]; void rot90(char s[55][55], char d[55][55]){ for(int i=0;i<n;i++)for(int j=0;j<n;j++)d[j][n-1-i]=s[i][j]; } void flip(char s[55][55], char d[55][55]){ for(int i=0;i<n;i++)for(int j=0;j<n;j++)d[i][n-1-j]=s[i][j]; } int defects(char a[55][55], char b[55][55]){ int c=0; for(int i=0;i<n;i++)for(int j=0;j<n;j++)if(a[i][j]=='X'||b[i][j]=='X')c++; return c; } int main(){ if(scanf("%d",&n)!=1) return 0; for(int i=0;i<n;i++)scanf("%s",g1[i]); for(int i=0;i<n;i++)scanf("%s",g2[i]); int ans=1<<30; // 枚举第二层玻璃的 8 种摆放(4 个旋转 × 是否镜像,用中间缓冲避免原地覆盖) for(int f=0;f<2;f++){ memcpy(t, g2, sizeof(t)); if(f){ flip(t, tmp); memcpy(t, tmp, sizeof(t)); } for(int k=0;k<4;k++){ int d=defects(g1, t); if(d<ans) ans=d; rot90(t, tmp); memcpy(t, tmp, sizeof(t)); } } printf("%d\n", ans); return 0; }
- 1
信息
- ID
- 2703
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者