大白书 P12
#include<cstring>
#include<cstdio>
#include<algorithm>
#define for(i,t) for (int i=0;i<(t);++i)
using namespace std;
#define N 10
char v[6][N][N],b[N][N][N];
int n;
//z
//| x
//| /
//|/
//-----y
void get(int k,int i,int j,int dep,int &x,int &y,int &z)
{
if (k==0) {x=dep; y=j; z=n-1-i;}
if (k==1) {x=n-1-j; y=dep; z=n-1-i;}
if (k==2) {x=n-1-dep; y=n-1-j; z=n-1-i;}
if (k==3) {x=j; y=n-1-dep; z=n-1-i;}
if (k==4) {x=n-1-i; y=j; z=n-1-dep;}
if (k==5) {x=i; y=j; z=dep;}
}
void doit()
{ scanf("%d",&n);
for (i,n) for (k,6) for (j,n) scanf(" %c",&v[k][i][j]);
for (i,n) for (j,n) for (k,n) b[i][j][k]='#';
for (k,6) for (i,n) for (j,n) if (v[k][i][j]=='.')
for (p,n)
{
int x,y,z;
get(k,i,j,p,x,y,z);
b[x][y][z]='.';
}
while (1)
{ bool flag=0;
for (k,6) for (i,n) for (j,n) if (v[k][i][j]!='.')
for (p,n)
{
int x,y,z;
get(k,i,j,p,x,y,z);
if (b[x][y][z]=='.') continue;
if (b[x][y][z]=='#') b[x][y][z]=v[k][i][j];
if (b[x][y][z]==v[k][i][j]) break;
b[x][y][z]='.';
flag=1;
}
if (!flag) break;
}
int ans=0;
for (i,n) for (j,n) for (k,n) if (b[i][j][k]!='.') ans++;
printf("%d gram(s)\n",ans);
}
int main()
{ while (scanf("%d",&n),n)
{ printf("Maximum weight: ");
doit();
}
}