• UVA 253 Cube painting


    题目链接:https://vjudge.net/problem/UVA-253

    题目翻译摘自《算法禁赛入门经典》

    题目大意

      输入两个骰子,判断二者是否等价。每个骰子用 6 个字母表示。

    分析

      定义旋转操作即可。

    代码如下

      1 #include <bits/stdc++.h>
      2 using namespace std;
      3  
      4 #define INIT() ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
      5 #define Rep(i,n) for (int i = 0; i < (n); ++i)
      6 #define For(i,s,t) for (int i = (s); i <= (t); ++i)
      7 #define rFor(i,t,s) for (int i = (t); i >= (s); --i)
      8 #define ForLL(i, s, t) for (LL i = LL(s); i <= LL(t); ++i)
      9 #define rForLL(i, t, s) for (LL i = LL(t); i >= LL(s); --i)
     10 #define foreach(i,c) for (__typeof(c.begin()) i = c.begin(); i != c.end(); ++i)
     11 #define rforeach(i,c) for (__typeof(c.rbegin()) i = c.rbegin(); i != c.rend(); ++i)
     12  
     13 #define pr(x) cout << #x << " = " << x << "  "
     14 #define prln(x) cout << #x << " = " << x << endl
     15  
     16 #define LOWBIT(x) ((x)&(-x))
     17  
     18 #define ALL(x) x.begin(),x.end()
     19 #define INS(x) inserter(x,x.begin())
     20  
     21 #define ms0(a) memset(a,0,sizeof(a))
     22 #define msI(a) memset(a,inf,sizeof(a))
     23 #define msM(a) memset(a,-1,sizeof(a))
     24 
     25 #define MP make_pair
     26 #define PB push_back
     27 #define ft first
     28 #define sd second
     29  
     30 template<typename T1, typename T2>
     31 istream &operator>>(istream &in, pair<T1, T2> &p) {
     32     in >> p.first >> p.second;
     33     return in;
     34 }
     35  
     36 template<typename T>
     37 istream &operator>>(istream &in, vector<T> &v) {
     38     for (auto &x: v)
     39         in >> x;
     40     return in;
     41 }
     42  
     43 template<typename T1, typename T2>
     44 ostream &operator<<(ostream &out, const std::pair<T1, T2> &p) {
     45     out << "[" << p.first << ", " << p.second << "]" << "
    ";
     46     return out;
     47 }
     48 
     49 inline int gc(){
     50     static const int BUF = 1e7;
     51     static char buf[BUF], *bg = buf + BUF, *ed = bg;
     52     
     53     if(bg == ed) fread(bg = buf, 1, BUF, stdin);
     54     return *bg++;
     55 } 
     56 
     57 inline int ri(){
     58     int x = 0, f = 1, c = gc();
     59     for(; c<48||c>57; f = c=='-'?-1:f, c=gc());
     60     for(; c>47&&c<58; x = x*10 + c - 48, c=gc());
     61     return x*f;
     62 }
     63 
     64 template<class T>
     65 inline string toString(T x) {
     66     ostringstream sout;
     67     sout << x;
     68     return sout.str();
     69 }
     70  
     71 typedef long long LL;
     72 typedef unsigned long long uLL;
     73 typedef pair< double, double > PDD;
     74 typedef pair< int, int > PII;
     75 typedef pair< int, PII > PIPII;
     76 typedef pair< string, int > PSI;
     77 typedef pair< int, PSI > PIPSI;
     78 typedef set< int > SI;
     79 typedef set< PII > SPII;
     80 typedef vector< int > VI;
     81 typedef vector< VI > VVI;
     82 typedef vector< PII > VPII;
     83 typedef map< int, int > MII;
     84 typedef map< int, string > MIS;
     85 typedef map< int, PII > MIPII;
     86 typedef map< PII, int > MPIII;
     87 typedef map< string, int > MSI;
     88 typedef map< string, string > MSS;
     89 typedef map< PII, string > MPIIS;
     90 typedef map< PII, PII > MPIIPII;
     91 typedef multimap< int, int > MMII;
     92 typedef multimap< string, int > MMSI;
     93 //typedef unordered_map< int, int > uMII;
     94 typedef pair< LL, LL > PLL;
     95 typedef vector< LL > VL;
     96 typedef vector< VL > VVL;
     97 typedef priority_queue< int > PQIMax;
     98 typedef priority_queue< int, VI, greater< int > > PQIMin;
     99 const double EPS = 1e-6;
    100 const LL inf = 0x7fffffff;
    101 const LL infLL = 0x7fffffffffffffffLL;
    102 const LL mod = 1e9 + 7;
    103 const int maxN = 1e4 + 7;
    104 const LL ONE = 1;
    105 const LL evenBits = 0xaaaaaaaaaaaaaaaa;
    106 const LL oddBits = 0x5555555555555555;
    107 
    108 string cube1, cube2;
    109 bool ans;
    110 
    111 // 绕 X 轴顺时针旋转 90 度 
    112 void rotateX(string &x) {
    113     swap(x[0], x[4]);
    114     swap(x[1], x[5]);
    115     swap(x[1], x[4]);
    116 }
    117 
    118 // 绕 Y 轴顺时针旋转 90 度 
    119 void rotateY(string &x) {
    120     swap(x[0], x[3]);
    121     swap(x[2], x[5]);
    122     swap(x[2], x[3]);
    123 }
    124 
    125 // 绕 Z 轴顺时针旋转 90 度 
    126 void rotateZ(string &x) {
    127     swap(x[1], x[2]);
    128     swap(x[3], x[4]);
    129     swap(x[2], x[3]);
    130 }
    131 
    132 int main(){
    133     //freopen("MyOutput.txt","w",stdout);
    134     //freopen("input.txt","r",stdin);
    135     INIT();
    136     while(cin >> cube1) {
    137         cube2 = cube1.substr(6, 6);
    138         cube1 = cube1.substr(0, 6);
    139         ans = 0;
    140         
    141         Rep(i, 4) {
    142             rotateX(cube1);
    143             Rep(j, 4) {
    144                 rotateZ(cube1);
    145                 if(cube1 == cube2) ans = 1;
    146             }
    147         }
    148         Rep(i, 4) {
    149             rotateY(cube1);
    150             Rep(j, 4) {
    151                 rotateZ(cube1);
    152                 if(cube1 == cube2) ans = 1;
    153             }
    154         }
    155         
    156         if(ans) cout << "TRUE" << endl;
    157         else cout << "FALSE" <<endl;
    158     }
    159     return 0;
    160 }
    View Code
  • 相关阅读:
    Codeforces 1255B Fridge Lockers
    Codeforces 1255A Changing Volume
    Codeforces 1255A Changing Volume
    leetcode 112. 路径总和
    leetcode 129. 求根到叶子节点数字之和
    leetcode 404. 左叶子之和
    leetcode 104. 二叉树的最大深度
    leetcode 235. 二叉搜索树的最近公共祖先
    450. Delete Node in a BST
    树的c++实现--建立一棵树
  • 原文地址:https://www.cnblogs.com/zaq19970105/p/11038214.html
Copyright © 2020-2023  润新知