Asa's Website

D - Dice IV

cpaojitp1

最終更新日

Table of Contents

Loading...

問題

https://onlinejudge.u-aizu.ac.jp/courses/lesson/2/ITP1/11/ITP1_11_D

問題文

Dice I と同じ方法で、 nn 個のサイコロを作る。
これらがすべて異なるか判定してね。
判定は Dice III と同じ方法。

制約

サンプル

I/O 1

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

I/O 2

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

考察

同じ方法で、全ペアを試して判定するだけ。

コード

https://onlinejudge.u-aizu.ac.jp/status/users/a01sa01to/submissions/1/ITP1_11_D/judge/6371105/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() { int n; cin >> n; vector<Dice> dices(n); rep(i, n) rep(j, 6) cin >> dices[i].d[j]; rep(i, n) for (int j = i + 1; j < n; ++j) { if (dices[i].shake("RRRRERRRRNRRRRERRRRNRRRRERRRRN", dices[j].d)) { cout << "No" << endl; return 0; } } cout << "Yes" << endl; return 0; }