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;}

  

算法竞赛入门经典训练指南

 

原创粉丝点击