UVALive 3401

来源:互联网 发布:矩阵理论与应用研究生 编辑:程序博客网 时间:2024/05/07 22:58
#pragma warning(disable:4996)#include<cstdio>#include<cstring>#include<string>#include<cmath>#include<vector>#include<algorithm>#include<iostream>#include<time.h>#include<map>#include<set>#include<sstream>using namespace std;int L[]={ 5, 1 , 3, 4, 6, 2 };int up[] = { 3, 2, 6, 1, 5, 4 };void rot(int *T,int  *p){    int q[10];    memcpy(q, p, sizeof(q));    for (int i = 0; i < 6; i++)    {        p[i] = T[q[i]-1];    }}int vs_main(){    printf("dice24[24][6]={\n");    for (int i = 1; i <= 6; i++)    {        int p0[] = { 1, 2, 3, 4, 5, 6 };        if (i == 1)        {            rot(up, p0);        }        if (i == 2)        {            rot(L, p0);            rot(up, p0);        }        if (i == 3)        {            ;        }        if (i == 4)        {            rot(up, p0);            rot(up, p0);        }        if (i == 5)        {            rot(L, p0);            rot(L, p0);            rot(L, p0);            rot(up, p0);        }        if (i == 6)        {            rot(L, p0);            rot(L, p0);            rot(up, p0);        }       printf("{%d,%d,%d,%d,%d,%d},", p0[0], p0[1], p0[2], p0[3], p0[4], p0[5]);        printf("\n");        for (int i = 1; i <= 3; i++)        {            rot(L, p0);            printf("{%d,%d,%d,%d,%d,%d},", p0[0], p0[1], p0[2], p0[3], p0[4], p0[5]);                printf("\n");        }    }        printf("};\n");    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;}
#pragma warning(disable:4996)#include<cstdio>#include<cstring>#include<string>#include<cmath>#include<vector>#include<algorithm>#include<iostream>#include<time.h>#include<map>#include<set>#include<sstream>using namespace std;int dice24[24][10] = { { 2, 1, 5, 0, 4, 3 }, { 2, 0, 1, 4, 5, 3 }, { 2, 4, 0, 5, 1, 3 }, { 2, 5, 4, 1, 0, 3 },{ 4, 2, 5, 0, 3, 1 }, { 5, 2, 1, 4, 3, 0 }, { 1, 2, 0, 5, 3, 4 }, { 0, 2, 4, 1, 3, 5 }, { 0, 1, 2, 3, 4, 5 }, { 4, 0, 2, 3, 5, 1 },{ 5, 4, 2, 3, 1, 0 }, { 1, 5, 2, 3, 0, 4 }, { 5, 1, 3, 2, 4, 0 }, { 1, 0, 3, 2, 5, 4 }, { 0, 4, 3, 2, 1, 5 }, { 4, 5, 3, 2, 0, 1 },{ 1, 3, 5, 0, 2, 4 }, { 0, 3, 1, 4, 2, 5 }, { 4, 3, 0, 5, 2, 1 }, { 5, 3, 4, 1, 2, 0 }, { 3, 4, 5, 0, 1, 2 }, { 3, 5, 1, 4, 0, 2 },{ 3, 1, 0, 5, 4, 2 }, { 3, 0, 4, 1, 5, 2 } };const int INF = 0x3f3f3f3f;const int maxn = 4;int n, dice[maxn][6], ans;vector<string> names;int ID(const char *name){    string s(name);    int n = names.size();    for (int i = 0; i < n; i++)        if (names[i] == s)            return i;        names.push_back(s);        return n;}int r[maxn], color[maxn][6];void check(){    for (int i = 0; i < n; i++)        for (int j = 0; j < 6; j++)            color[i][dice24[r[i]][j]] = dice[i][j];    int tot = 0;    for (int j = 0; j < 6; j++)    {        int cnt[maxn*6];        memset(cnt, 0, sizeof(cnt));        int maxface = 0;        for (int i = 0; i < n; i++)            maxface = max(maxface, ++cnt[color[i][j]]);        tot += n - maxface;    }    ans = min(ans, tot);}void dfs(int d){    if (d == n)check();    else for (int i = 0; i < 24; i++)    {        r[d] = i;        dfs(d + 1);    }}int vs_main(){    while (scanf("%d", &n) == 1 && n)    {        names.clear();        for (int i = 0; i < n; i++)            for (int j = 0; j < 6; j++)            {            char name[30];            scanf("%s", name);            dice[i][j] = ID(name);            }        ans = n * 6;        r[0] = 0;        dfs(1);        printf("%d\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;}
0 0
原创粉丝点击