LA2995

来源:互联网 发布:如何申请农村淘宝 编辑:程序博客网 时间:2024/05/21 10:40
#pragma warning(disable:4996)#include<cstdio>#include<cstring>#include<string>#include<cmath>#include<vector>#include<algorithm>#include<iostream>#include<time.h>using namespace std;#define REP(i,n) for(int i=0;i<(n);i++)char view[10][10][10];char pos[10][10][10];int n;char  get_char(){    char a;    for (;;)    {        a = getchar();        if (a <= 'Z'&&a >= 'A' || a == '.')            return a;    }}void get(int k, int i, int j, int len, int &x, int &y, int &z){    if (k == 0)    {         x = len;         y = j;        z = i;     }    if (k == 1)    {        x = n - j - 1;         y = len;         z = i;    }    if (k == 2)    {        x = n - len - 1;        y = n - j - 1;        z = i;    }    if (k == 3)    {        x = j;        y = n - len - 1;        z = i;    }    if (k == 4)    {        x = n - i - 1;        y = j;        z = len;    }    if (k == 5)    {        x = i;        y = j;        z = n - len - 1;    }}int vs_main(){    while (cin >> 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;            get(k, i, j, p, x, y, z);            pos[x][y][z] = '.';            }        for (;;)        {            bool flag = true;            REP(k, 6)REP(i, n)REP(j, n)            {                if (view[k][i][j] != '.')                    REP(p, n)                {                    int x, y, z;                    get(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] = '.';                    flag = false;                }            }            if (flag)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)\n", ans);    }    return 0;}int main(){    int start = clock();    freopen("in.txt", "r", stdin);    //freopen("E:/out.txt","w",stdout);    printf("#===================#\n");    vs_main();    printf("#===================#\n");    printf("Time:%.3lf\n", double(clock() - start) / CLOCKS_PER_SEC);    //system("pause");    return 0;}

wa

#pragma warning(disable:4996)#include<cstdio>#include<cstring>#include<string>#include<cmath>#include<vector>#include<algorithm>#include<iostream>#include<time.h>#include<cstdlib>#define REP(i,n) for(int i=0;i<(n);i++)using namespace std;char view[7][15][15];char board[15][15][15];int n;int flag;bool done;void Delete1(int k, int len, int i, int j){    int x, y, z;    if (k == 1)    {        x = len;        y = j;        z = i;    }    if (k == 2)    {        x = n - j - 1;        y = len;        z = i;    }    if (k == 3)    {        x = n - len - 1;        y = n - j - 1;        z = i;    }    if (k == 4)    {        x = j;        y = n - len - 1;        z = i;    }    if (k == 5)    {        x = n - i - 1;        y = j;        z = len;    }    if (k == 6)    {        x = i;        y = j;        z = n - len - 1;    }    if (view[k][i][j] == '.')    {        board[x][y][z] = '.';    }}void Delete2(int k,int len, int i, int j){    if (view[k][i][j] != '.')    {        int x, y, z;        if (k == 1)        {            x = len;            y = j;            z = i;        }        if (k == 2)        {            x = n - j - 1;            y = len;            z = i;        }        if (k == 3)        {            x = n - len - 1;            y = n - j - 1;            z = i;        }        if (k == 4)        {            x = j;            y = n - len - 1;            z = i;        }        if (k == 5)        {            x = n - i - 1;            y = j;            z = len;        }        if (k == 6)        {            x = i;            y = j;            z = n - len - 1;        }        if (board[x][y][z] == '#')        {            board[x][y][z] = view[k][i][j];            flag = 1;            return;        }        if (view[k][i][j] == board[x][y][z])        {            flag = 1;            return;        }        board[x][y][z] = '.';        done = false;        return;    }    return;}int vs_main(){    while (cin >> n,n)    {        for (int i = 0; i < n; i++)        {            for (int k = 1; k <= 6; k++)            {                for (int j = 0; j < n; j++)                {                    cin >> view[k][i][j];                }            }        }        for (int k = 0; k < n; k++)        {            for (int i = 0; i < n; i++)            {                for (int j = 0; j < n; j++)                {                    board[k][i][j] = '#';                }            }        }        for (int k = 1; k <= 6; k++)        {            for (int len = 0; len < n; len++)//            {                for (int i = 0; i <n; i++)                {                    for (int j = 0; j <n; j++)                    {                         Delete1(k,len, i, j);                    }                }            }        }            done = true;            for (int k = 1; k <= 6; k++)            {                for (int len = 0; len < n; len++)//                {                    for (int i = 0; i < n; i++)                    {                        for (int j = 0; j < n; j++)                        {                            Delete2(k, len, i, j);                            if (flag == 1)                                break;                        }                    }                }            }        int count = 0;        for (int k = 0; k < n; k++)        {            for (int i = 0; i < n; i++)            {                for (int j = 0; j < n; j++)                {                    if (board[k][i][j] != '.')                        count++;                }            }        }        printf("Maximum weight: %d gram(s)\n", count);    }        return 0;}int main(){    int start = clock();    freopen("in.txt", "r", stdin);    //freopen("E:/out.txt","w",stdout);    printf("#===================#\n");    vs_main();    printf("#===================#\n");    printf("Time:%.3lf\n", double(clock() - start) / CLOCKS_PER_SEC);    //system("pause");    return 0;}
0 0