zoukankan      html  css  js  c++  java
  • HDU5983. Pocket Cube

    题目大意

    给你一个二阶魔方,问一步操作后是否复原

    简要题解

    暴力乱搞即可,可以根据给定的那个说明来写。

      1 #include <bits/stdc++.h>
      2 using namespace std;
      3 namespace my_header {
      4 #define pb push_back
      5 #define mp make_pair
      6 #define pir pair<int, int>
      7 #define vec vector<int>
      8 #define pc putchar
      9 #define clr(t) memset(t, 0, sizeof t)
     10 #define pse(t, v) memset(t, v, sizeof t)
     11 #define bl puts("")
     12 #define wn(x) wr(x), bl
     13 #define ws(x) wr(x), pc(' ')
     14     const int INF = 0x3f3f3f3f;
     15     typedef long long LL;
     16     typedef double DB;
     17     inline char gchar() {
     18         char ret = getchar();
     19         for(; (ret == '
    ' || ret == '
    ' || ret == ' ') && ret != EOF; ret = getchar());
     20         return ret; }
     21     template<class T> inline void fr(T &ret, char c = ' ', int flg = 1) {
     22         for(c = getchar(); (c < '0' || '9' < c) && c != '-'; c = getchar());
     23         if (c == '-') { flg = -1; c = getchar(); }
     24         for(ret = 0; '0' <= c && c <= '9'; c = getchar())
     25             ret = ret * 10 + c - '0';
     26         ret = ret * flg; }
     27     inline int fr() { int t; fr(t); return t; }
     28     template<class T> inline void fr(T&a, T&b) { fr(a), fr(b); }
     29     template<class T> inline void fr(T&a, T&b, T&c) { fr(a), fr(b), fr(c); }
     30     template<class T> inline char wr(T a, int b = 10, bool p = 1) {
     31         return a < 0 ? pc('-'), wr(-a, b, 0) : (a == 0 ? (p ? pc('0') : p) : 
     32             (wr(a/b, b, 0), pc('0' + a % b)));
     33     }
     34     template<class T> inline void wt(T a) { wn(a); }
     35     template<class T> inline void wt(T a, T b) { ws(a), wn(b); }
     36     template<class T> inline void wt(T a, T b, T c) { ws(a), ws(b), wn(c); }
     37     template<class T> inline void wt(T a, T b, T c, T d) { ws(a), ws(b), ws(c), wn(d); }
     38     template<class T> inline T gcd(T a, T b) {
     39         return b == 0 ? a : gcd(b, a % b); }
     40     template<class T> inline T fpw(T b, T i, T _m, T r = 1) {
     41         for(; i; i >>= 1, b = b * b % _m)
     42             if(i & 1) r = r * b % _m;
     43         return r; }
     44 };
     45 using namespace my_header;
     46 
     47 int b[30], a[30];
     48 
     49 inline int val(char c) {
     50     return c - 'a';
     51 }
     52 
     53 void X() {
     54     memcpy(a, b, sizeof b);
     55     a[val('u')] = b[val('v')];
     56     a[val('v')] = b[val('x')];
     57     a[val('w')] = b[val('u')];
     58     a[val('x')] = b[val('w')];
     59     a[val('b')] = b[val('n')];
     60     a[val('d')] = b[val('p')];
     61     a[val('f')] = b[val('b')];
     62     a[val('h')] = b[val('d')];
     63     a[val('j')] = b[val('f')];
     64     a[val('l')] = b[val('h')];
     65     a[val('n')] = b[val('j')];
     66     a[val('p')] = b[val('l')];
     67     memcpy(b, a, sizeof a);
     68 }
     69 void Y() {
     70     memcpy(a, b, sizeof b);
     71     a[val('a')] = b[val('b')];
     72     a[val('b')] = b[val('d')];
     73     a[val('c')] = b[val('a')];
     74     a[val('d')] = b[val('c')];
     75     a[val('e')] = b[val('r')];
     76     a[val('f')] = b[val('t')];
     77     a[val('w')] = b[val('e')];
     78     a[val('u')] = b[val('f')];
     79     a[val('p')] = b[val('w')];
     80     a[val('o')] = b[val('u')];
     81     a[val('r')] = b[val('p')];
     82     a[val('t')] = b[val('o')];
     83     memcpy(b, a, sizeof a);
     84 }
     85 void Z() {
     86     memcpy(a, b, sizeof b);
     87     a[val('e')] = b[val('f')];
     88     a[val('f')] = b[val('h')];
     89     a[val('g')] = b[val('e')];
     90     a[val('h')] = b[val('g')];
     91     a[val('i')] = b[val('t')];
     92     a[val('j')] = b[val('s')];
     93     a[val('x')] = b[val('i')];
     94     a[val('w')] = b[val('j')];
     95     a[val('d')] = b[val('x')];
     96     a[val('c')] = b[val('w')];
     97     a[val('t')] = b[val('d')];
     98     a[val('s')] = b[val('c')];
     99     memcpy(b, a, sizeof b);
    100 }
    101 
    102 bool chk() {
    103     vector<int> st;
    104     st.clear();
    105     for (int i = 0; i < 6; ++i) {
    106         for (int j = 1; j < 4; ++j) {
    107             int k = i * 4 + j - 1;
    108             if (b[k] != b[k + 1])
    109                 return false;
    110         }
    111         st.pb(b[i * 4]);
    112     }
    113     sort(st.begin(), st.end());
    114     st.erase(unique(st.begin(), st.end()), st.end());
    115     //printf("%d
    ", (int)st.size());
    116     if (st.size() != 6)
    117         return false;
    118     return true;
    119 }
    120 
    121 bool judge() {
    122     if (chk())
    123         return true;
    124     X();
    125     if (chk()) return true;
    126     X(), X();
    127     if (chk()) return true;
    128     X();
    129 
    130     Y();
    131     if (chk()) return true;
    132     Y(), Y();
    133     if (chk()) return true;
    134     Y();
    135 
    136     Z();
    137     if (chk()) return true;
    138     Z(), Z();
    139     if (chk()) return true;
    140     Z();
    141 
    142     return false;
    143 }
    144 
    145 int main() {
    146 #ifdef lol
    147     freopen("5983.in", "r", stdin);
    148     freopen("5983.out", "w", stdout);
    149 #endif
    150 
    151     int T;
    152     scanf("%d", &T);
    153     while (T--) {
    154         for (int i = 0; i < 24; ++i)
    155             scanf("%d", &b[i]);
    156         if (judge())
    157             puts("YES");
    158         else puts("NO");
    159     }
    160     return 0;
    161 }
  • 相关阅读:
    算法图解——求Int整型数二进制中1的个数
    图解算法——句子逆序
    图解算法——反转字符串
    图解算法——整数倒置
    《图解算法》之狄克斯特拉算法
    图解算法——合并两个有序链表
    图解算法——括号匹配
    图解算法——两数之和
    #热烈庆祝我党成立100周年#
    jQuery全选反选
  • 原文地址:https://www.cnblogs.com/ichn/p/6434496.html
Copyright © 2011-2022 走看看