uva-1030
来源:互联网 发布:用excel数据分析方法 编辑:程序博客网 时间:2024/05/17 23:33
参考
#include<iostream>#include<cstdio>using namespace std;char v[8][12][12];char p[12][12][12];int n;void getpos(int k,int i,int j,int t,int& x,int& y,int& z){ if(k==0) { x=t,y=j,z=i; } else if(k==1) { y=t,z=i,x=n-1-j; } else if(k==2) { x=n-1-t,y=n-1-j,z=i; } else if(k==3) { x=j,y=n-t-1,z=i; } else if(k==4) { x=n-1-i,y=j,z=t; } else if(k==5) { x=i,y=j,z=n-t-1; }}char read(){char ch;while(1){ch=getchar();if((ch>='A' && ch<='Z') || ch=='.')return ch;}}int main(){//freopen("d:\\test.txt","r",stdin); int i,j,k,t; while(scanf("%d",&n)==1&&n) { for(i=0;i<n;i++) for(k=0;k<6;k++) for(j=0;j<n;j++) v[k][i][j]=read(); for(i=0;i<n;i++) for(j=0;j<n;j++) for(k=0;k<n;k++) p[i][j][k]='#'; for(k=0;k<6;k++) for(i=0;i<n;i++) for(j=0;j<n;j++) if(v[k][i][j]=='.') for(t=0;t<n;t++) {int x,y,z; getpos(k,i,j,t,x,y,z); p[x][y][z]='.'; } while(1) { int ftag=1; for(k=0;k<6;k++) for(i=0;i<n;i++) for(j=0;j<n;j++) if(v[k][i][j]!='.') { for(t=0;t<n;t++) { int x,y,z; getpos(k,i,j,t,x,y,z); if(p[x][y][z]=='.') continue; if(p[x][y][z]=='#') { p[x][y][z]=v[k][i][j]; break; } if(p[x][y][z]==v[k][i][j]) break; p[x][y][z]='.'; ftag=0; } } if(ftag) break; } int ans=0; for(i=0;i<n;i++) for(j=0;j<n;j++) for(k=0;k<n;k++) if(p[i][j][k]!='.') ans++; printf("Maximum weight: %d gram(s)\n",ans); } return 0;}
算法竞赛入门经典训练指南