zoukankan      html  css  js  c++  java
  • [ACM]魔方涂色(SD高校ACM周赛3(SDUT))

    题目描述

    越来越多的人开始玩魔方,理工大学的小明从小钟爱魔方, 但是他注意到魔方的颜色太过单调了,有一天他想给魔方的六个面涂色,摆在他面前的有m种颜料,每种颜料从1到m进行编号,题目给出小明想出的所有的涂抹方法(按照上下左右前后的顺序给出)但是小明忽略了一点,如果将魔方旋转他所想到的涂抹方法可能有重复,比如(1,2,3,4,5,6)与(4,3,1,2,5,6)是一种涂色方案 

    输入

    有一组数据,第一行是n(n<=100000)代表小明想到的方案,下面的n行,每行有六个整数,整数x代表颜料的编号并且(x)满足(x>=1&&x<=1000)

    输出

    实际的方案总数

    示例输入

    2
    1 2 3 4 5 6
    4 3 1 2 5 6

    示例输出

    1

    提示

     数据较大,建议用scanf代替cin

     

    比赛的时候不关心什么名次,就一直死磕这个题,至今未果。

    弱菜表示只会笨方法……。思路是模拟,把最小号的统一放上面,除去上下的次小号放左面,剩下的前后就确定了。然后就可以用set存了,最后set的大小便是方案数,但是不对,不知是思路错还是哪里没写对……。

    未AC代码:

    View Code
     1 #include <iostream>
     2 #include <cstring>
     3 #include <cstdio>
     4 #include <cstdlib>
     5 #include <cmath>
     6 #include <string>
     7 #include <vector>
     8 #include <list>
     9 #include <map>
    10 #include <set>
    11 #include <queue>
    12 #include <stack>
    13 #include <bitset>
    14 #include <algorithm>
    15 #include <numeric>
    16 #include <functional>
    17 using namespace std;
    18 typedef long long ll;
    19 #define read freopen("in.txt","r",stdin)
    20 #define write freopen("out.txt","w",stdout)
    21 #define maxn 1005
    22 
    23 struct str
    24 {
    25     int num[6];
    26     bool operator == ( const str &rhs) const
    27     {
    28         if((rhs.num[0]==num[0])&&(rhs.num[1]==num[1])
    29            &&(rhs.num[2]==num[2])&&(rhs.num[3]==num[3])
    30            &&(rhs.num[4]==num[4])&&(rhs.num[5]==num[5]))
    31         return true;
    32         return false;
    33     }
    34     bool operator < (const str &rhs) const
    35     {
    36         if(rhs.num[0]==num[0])
    37             if(rhs.num[1]==num[1])
    38                if(rhs.num[2]==num[2])
    39                    if(rhs.num[3]==num[3])
    40                        if(rhs.num[4]==num[4])return rhs.num[5]>num[5];
    41                        else return rhs.num[4]>num[4];
    42                    else return rhs.num[3]>num[3];
    43                else return rhs.num[2]>num[2];
    44             else return rhs.num[1]>num[1];
    45         else return rhs.num[0]>num[0];
    46     }
    47 };
    48 int findO(int dx){return dx%2?--dx:++dx;}
    49 int main()
    50 {
    51     int n;
    52     while(~scanf("%d",&n))
    53     {
    54         set<str>st;
    55         st.clear();
    56         while(n--)
    57         {
    58             int num[6];
    59             for(int i=0;i<6;i++)scanf("%d",&num[i]);
    60             int min=maxn,dx;
    61             /*
    62             2
    63             1 2 3 4 5 6
    64             4 3 1 2 5 6
    65             */
    66             for(int i=0;i<6;i++)
    67                 if(num[i]<min)min=num[i],dx=i;
    68             if(dx==1)swap(num[0],num[1]),swap(num[2],num[3]);
    69             else if(dx>1)
    70             {
    71                 if(dx%2==0)swap(num[0],num[1]);
    72                 swap(num[0],num[dx]),swap(num[1],num[findO(dx)]);
    73             }
    74 
    75             min=maxn;
    76             for(int i=2;i<6;i++)
    77                 if(num[i]<min)min=num[i],dx=i;
    78             if(dx==3)swap(num[2],num[3]),swap(num[4],num[5]);
    79             else if(dx>3)
    80             {
    81                 if(dx==4)swap(num[2],num[3]),swap(num[2],num[4]),swap(num[3],num[5]);
    82                 else swap(num[2],num[4]),swap(num[3],num[5]);
    83             }
    84             str s;
    85             for(int i=0;i<6;i++)s.num[i]=num[i];
    86             st.insert(s);
    87         }
    88         printf("%d\n",st.size());
    89     }
    90     return 0;
    91 }
  • 相关阅读:
    latex之图表位置控制
    iPhone应用程序的启动过程
    zend server mac 下配置
    外键约束
    yii2中的资源....
    Composer fails to download http json files on "update", not a network issue, https fine
    UIResponder
    UIApplication深入学习
    UISCREEN 和支持高分辨率的显示屏
    IOS7 隐藏状态栏 (电池栏)
  • 原文地址:https://www.cnblogs.com/mcflurry/p/2868047.html
Copyright © 2011-2022 走看看