uva 1030 - Image Is Everything

1985 단어
WF의 제목 수준은 역시 보통이 아니다. 유여가의 코드를 보고 나서야 썼다...
char pos[M][M][M], view[6][M][M];
int n;

char get_char()
{
    char ch;
    while(1)
    {
        ch = getchar();
        if((ch<='Z'&&ch>='A')||ch=='.') return ch;
    }
}
void getpos(int k, int i, int j, int p, int &x, int &y, int &z)
{
    if(k==0) { x = p, y = j, z = i; }
    if(k==1) { x = n-j-1, y = p, z = i; }
    if(k==2) { x = n-p-1, y = n-j-1, z = i; }
    if(k==3) { x = j, y = n-p-1; z = i; }
    if(k==4) { x = n-i-1, y = j; z = p; }
    if(k==5) { x = i; y = j, z = n-p-1; }
}
int main()
{
    while(scanf("%d", &n) && n)
    {
        REP(i, n) REP(k, 6) REP(j, n)
            view[k][i][j] = get_char();
        REP(i, n) REP(j, n) REP(k, n)
            pos[i][j][k] = '#';
        REP(k, 6) REP(i, n) REP(j, n)
            if(view[k][i][j]=='.')
                REP(p, n)
                {
                    int x, y, z;
                    getpos(k, i, j, p, x, y, z);
                    pos[x][y][z] = '.';
                }
        while(1)
        {
            bool done = true;
            REP(k, 6) REP(i, n) REP(j, n)
                if(view[k][i][j]!='.')
                    REP(p, n)
                    {
                        int x, y, z;
                        getpos(k, i, j, p, x, y, z);
                        if(pos[x][y][z]=='.')   continue;
                        if(pos[x][y][z]=='#')   { pos[x][y][z] = view[k][i][j]; break; }

                        if(pos[x][y][z]==view[k][i][j]) break;
                        pos[x][y][z] = '.';
                        done = false;
                    }
            if(done) break;
        }
        int ans = 0;
        REP(i, n) REP(j, n) REP(k, n)
            if(pos[i][j][k]!='.') ++ans;

        printf("Maximum weight: %d gram(s)
", ans); } return 0; }

좋은 웹페이지 즐겨찾기