C - Dice III

cpaojitp1

最終更新日

Table of Contents

Loading...

問題

https://onlinejudge.u-aizu.ac.jp/courses/lesson/2/ITP1/11/ITP1_11_C (新しいタブで開く)

問題文

Dice I と同じ方法で、2 つのサイコロを作る。
これらが同じものか判定してね。

制約

サンプル

I/O 1

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

I/O 2

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

考察

うまく回して全部試してどれかが一致するかチェック。

コード

https://onlinejudge.u-aizu.ac.jp/status/users/a01sa01to/submissions/1/ITP1_11_C/judge/6371085/C++17 (新しいタブで開く)

struct Dice { int d[6]; bool shake(string s, const int* b) { for (char c : s) { bool chk = true; rep(i, 6) { if (d[i] != b[i]) { chk = false; break; } } if (chk) return true; switch (c) { case 'N': swap(d[0], d[1]), swap(d[1], d[5]), swap(d[5], d[4]); break; case 'S': swap(d[0], d[4]), swap(d[4], d[5]), swap(d[5], d[1]); break; case 'E': swap(d[0], d[3]), swap(d[3], d[5]), swap(d[5], d[2]); break; case 'W': swap(d[0], d[2]), swap(d[2], d[5]), swap(d[5], d[3]); break; case 'R': swap(d[1], d[2]), swap(d[2], d[4]), swap(d[4], d[3]); break; case 'L': swap(d[1], d[3]), swap(d[3], d[4]), swap(d[4], d[2]); break; } } return false; } }; int main() { Dice dice1; rep(i, 6) cin >> dice1.d[i]; int dice2[6]; rep(i, 6) cin >> dice2[i]; cout << (dice1.shake("RRRRERRRRNRRRRERRRRNRRRRERRRRN", dice2) ? "Yes" : "No") << endl; return 0; }