Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #pragma comment(linker, "/STACK:268435456")
- #include <algorithm>
- #include <bitset>
- #include <cmath>
- #include <cstdio>
- #include <cstring>
- #include <deque>
- #include <iostream>
- #include <map>
- #include <queue>
- #include <set>
- #include <sstream>
- #include <string>
- #include <vector>
- using namespace std;
- //const string IN_NAME = "input.txt";
- //const string OUT_NAME = "output.txt";
- const string NAME = "cube";
- const string IN_NAME = NAME + ".in";
- const string OUT_NAME = NAME + ".out";
- template<class T> T abs(T &x) { return ((x) >= 0) ? (x) : (-(x)); }
- template<class T> T sqr(T &x) { return (x) * (x); }
- template<class T> T min(T &a, T &b) { return ((a) < (b)) ? (a) : (b); }
- template<class T> T max(T &a, T &b) { return ((a) > (b)) ? (a) : (b); }
- #define sz(v) ((int) ((v).size()))
- #define all(v) (v).begin(), (v).end()
- #define fori(i,n) for (int i = 0; i < (n); i++)
- #define show(x) { cout << (#x) << " = " << (x) << endl; }
- typedef long long ll;
- typedef pair<int, int> ii;
- //------------------------------------------------------------------------------
- int n;
- char a[20][20][20];
- char b[20][20];
- bool v[20][20][20];
- /*
- void rotate1() {
- for (int k = 0; k < n; k++) {
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < n; j++) {
- b[i][j] = a[n-1-j][i][k];
- }
- }
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < n; j++) {
- a[i][j][k] = b[i][j];
- }
- }
- }
- }
- void rotate2() {
- for (int j = 0; j < n; j++) {
- for (int i = 0; i < n; i++) {
- for (int k = 0; k < n; k++) {
- b[i][k] = a[n-1-k][j][i];
- }
- }
- for (int i = 0; i < n; i++) {
- for (int k = 0; k < n; k++) {
- a[i][j][k] = b[i][k];
- }
- }
- }
- }
- void rotate3() {
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < n; j++) {
- for (int k = 0; k < n; k++) {
- b[j][k] = a[i][n-1-k][j];
- }
- }
- for (int j = 0; j < n; j++) {
- for (int k = 0; k < n; k++) {
- a[i][j][k] = b[j][k];
- }
- }
- }
- }
- */
- bool good(int x, int y, int z) {
- return (x >= 0 && x < n) && (y >= 0 && y < n) && (z >= 0 && z < n);
- }
- const int dx[6] = {1,-1,0,0,0,0};
- const int dy[6] = {0,0,1,-1,0,0};
- const int dz[6] = {0,0,0,0,1,-1};
- void dfs(int x, int y, int z) {
- v[x][y][z] = true;
- for (int k = 0; k < 6; k++) {
- int nx = x + dx[k];
- int ny = y + dy[k];
- int nz = z + dz[k];
- if (good(nx, ny, nz) && !v[nx][ny][nz] && a[nx][ny][nz] == a[x][y][z]) {
- dfs(nx, ny, nz);
- }
- }
- }
- bool tryMoveOutIJ0(int x, int y) {
- memset(v, 0, sizeof(v));
- dfs(x, y, 0);
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < n; j++) {
- for (int k = 1; k < n; k++) {
- if (v[i][j][k]) {
- if (a[i][j][k-1] != a[i][j][k]) {
- return false;
- }
- }
- }
- }
- }
- return true;
- }
- bool tryMoveOutIJN(int x, int y) {
- memset(v, 0, sizeof(v));
- dfs(x, y, n-1);
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < n; j++) {
- for (int k = n-2; k >= 0; k--) {
- if (v[i][j][k]) {
- if (a[i][j][k+1] != a[i][j][k]) {
- return false;
- }
- }
- }
- }
- }
- return true;
- }
- bool tryMoveOutIK0(int x, int z) {
- memset(v, 0, sizeof(v));
- dfs(x, 0, z);
- for (int i = 0; i < n; i++) {
- for (int j = 1; j < n; j++) {
- for (int k = 0; k < n; k++) {
- if (v[i][j][k]) {
- if (a[i][j-1][k] != a[i][j][k]) {
- return false;
- }
- }
- }
- }
- }
- return true;
- }
- bool tryMoveOutIKN(int x, int z) {
- memset(v, 0, sizeof(v));
- dfs(x, n-1, z);
- for (int i = 0; i < n; i++) {
- for (int j = n-2; j >= 0; j--) {
- for (int k = 0; k < n; k++) {
- if (v[i][j][k]) {
- if (a[i][j+1][k] != a[i][j][k]) {
- return false;
- }
- }
- }
- }
- }
- return true;
- }
- bool tryMoveOutJK0(int y, int z) {
- memset(v, 0, sizeof(v));
- dfs(0, y, z);
- for (int i = 1; i < n; i++) {
- for (int j = 0; j < n; j++) {
- for (int k = 0; k < n; k++) {
- if (v[i][j][k]) {
- if (a[i-1][j][k] != a[i][j][k]) {
- return false;
- }
- }
- }
- }
- }
- return true;
- }
- bool tryMoveOutJKN(int y, int z) {
- memset(v, 0, sizeof(v));
- dfs(n-1, y, z);
- for (int i = n-2; i >= 0; i--) {
- for (int j = 0; j < n; j++) {
- for (int k = 0; k < n; k++) {
- if (v[i][j][k]) {
- if (a[i+1][j][k] != a[i][j][k]) {
- return false;
- }
- }
- }
- }
- }
- return true;
- }
- bool solveTest() {
- for (int i = 0; i < n; i++)
- for (int j = 0; j < n; j++)
- if (tryMoveOutIJ0(i, j))
- return true;
- for (int i = 0; i < n; i++)
- for (int j = 0; j < n; j++)
- if (tryMoveOutIJN(i, j))
- return true;
- for (int i = 0; i < n; i++)
- for (int k = 0; k < n; k++)
- if (tryMoveOutIK0(i, k))
- return true;
- for (int i = 0; i < n; i++)
- for (int k = 0; k < n; k++)
- if (tryMoveOutIKN(i, k))
- return true;
- for (int j = 0; j < n; j++)
- for (int k = 0; k < n; k++)
- if (tryMoveOutJK0(j, k))
- return true;
- for (int j = 0; j < n; j++)
- for (int k = 0; k < n; k++)
- if (tryMoveOutJKN(j, k))
- return true;
- return false;
- }
- int main()
- {
- #ifndef ONLINE_JUDGE
- freopen(IN_NAME.c_str(), "r", stdin);
- freopen(OUT_NAME.c_str(), "w", stdout);
- #endif
- int tests;
- cin >> tests;
- for (int t = 1; t <= tests; t++) {
- cin >> n;
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < n; j++) {
- string s;
- cin >> s;
- for (int k = 0; k < n; k++) {
- a[i][j][k] = s[k];
- }
- }
- }
- if (n > 1 && solveTest()) {
- cout << "No" << endl;
- } else {
- cout << "Yes" << endl;
- }
- }
- }
Add Comment
Please, Sign In to add comment