2015年4月23日 星期四

2015/04/23 ACM-ICPC LiveArchive 2061 - The Triangle Game

/* https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=62 */
#include <algorithm>
#include <iostream>
#include <cstdio>

using namespace std;

int ord[6];
int tri[6][3];
int dir[6];

int pwd(int x, int n)
{
    if( n == 0 ) return 1;

    int p = pwd(x, n/2);
    if( n&1 ) return p*p*x;
    else return p*p;
}

int main()
{
    while(1)
    {
        for(int i = 0; i < 6; i++)
        {
            ord[i] = i;

            for(int j = 0; j < 3; j++)
                scanf("%d", &tri[i][j]);
        }

        int Ans = 0;

        while(1)
        {
            for(int i = 0; i < pwd(3, 6); i++)
            {
                bool OK = true;

                for(int bi = 0, vi = 1; bi < 6; bi++, vi *= 3)
                    dir[bi] = i%(vi*3)/vi;

                int sum = 0;

                for(int j = 0; j < 6; j++)
                {
                    int k = (j+1)%6;
                    if( tri[ord[j] ][(dir[j]+1)%3 ] != tri[ord[k] ][(dir[k]+2)%3 ] ) OK = false;
                    sum += tri[ord[j] ][dir[j] ];
                }

                if( OK ) Ans = max(Ans, sum);
            }

            if( !next_permutation(ord, ord+6) ) break;
        }

        if( Ans ) printf("%d\n", Ans);
        else puts("none");

        char c; scanf(" %c", &c);
        if( c == '$' ) break;
    }
}

沒有留言:

張貼留言