2022-06-12组队训练b
Cube
https://ac.nowcoder.com/acm/contest/36172/B
B题
题意:
给定两个能折成正方体的纸条,
问折成的正方体是不是完全一样的。
题解:
①根据题目给定的纸条类型,
根据空间想象能力可以很简单地判断出将所有类型都转换成第三种会方便解题。
题意:
给定两个能折成正方体的纸条,
问折成的正方体是不是完全一样的。
题解:
①根据题目给定的纸条类型,
根据空间想象能力可以很简单地判断出将所有类型都转换成第三种会方便解题。
②判断两个正方体每个数字对面的数字是否相同,相同就输出YES,有不相同的就输出NO。
#include <bits/stdc++.h> #define hh '\n' #define Cap_suleDebug(x) #x #define debug(x) cout << Cap_suleDebug(x) << " = " << x << hh #define I scanf #define O printf typedef long long ll; typedef unsigned long long ull; #define int ll using namespace std; // inline ll ri(){ll s=0,w=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0'&&ch<='9')s=s*10+ch-'0',ch=getchar();return s*w;} const int mod = 1e9 + 7; const int INF = 0x3f3f3f3f; // 1061109567 const int MAXINT = 0x7FFFFFFF; // 2147483647 typedef pair<int, int> PII; const int N = 1e6 + 10; int c1[6 + 1], c2[6 + 1]; int g1[3 + 1][4 + 1], g2[3 + 1][4 + 1]; void solve() { for (int i = 1; i <= 3; i++) for (int j = 1; j <= 4; j++) cin >> g1[i][j]; for (int i = 1; i <= 3; i++) for (int j = 1; j <= 4; j++) cin >> g2[i][j]; for (int i = 1; i <= 4; i++) { if (g1[1][i] != 0) { swap(g1[1][i], g1[1][1]); break; } } for (int i = 1; i <= 4; i++) { if (g1[3][i] != 0) { swap(g1[3][i], g1[3][1]); break; } } for (int i = 1; i <= 4; i++) { if (g2[1][i] != 0) { swap(g2[1][i], g2[1][1]); break; } } for (int i = 1; i <= 4; i++) { if (g2[3][i] != 0) { swap(g2[3][i], g2[3][1]); break; } } if (g1[2][4] == 0) { for (int i = 4; i >= 1; i--) { if (g1[3][i] != 0) { swap(g1[3][i], g1[2][4]); break; } } } if (g2[2][4] == 0) { for (int i = 4; i >= 1; i--) { if (g2[3][i] != 0) { swap(g2[3][i], g2[2][4]); break; } } } if (g1[1][1] == g2[1][1] && g1[3][1] == g2[3][1]) { vector<int> c1; for (int i = 1; i <= 4; i++) c1.push_back(g1[1][i]); vector<int> c2; for (int i = 1; i <= 4; i++) c2.push_back(g2[1][i]); int k = 4; while (k--) { if (c1 == c2) break; c1.push_back(c1[0]); c1.erase(c1.begin(), c1.begin()); } if (c1 == c2) { cout << "YES" << hh; return; } } else if (g1[1][1] == g2[3][1] && g1[3][1] == g2[1][1]) { vector<int> c1; for (int i = 1; i <= 4; i++) c1.push_back(g1[2][i]); vector<int> c2; for (int i = 1; i <= 4; i++) c2.push_back(g2[2][i]); reverse(c2.begin(), c2.end()); int k = 4; while (k--) { if (c1 == c2) break; c1.push_back(c1[0]); c1.erase(c1.begin(), c1.begin()); } if (c1 == c2) { cout << "YES" << hh; return; } } else { c1[g1[1][1]] = g1[3][1]; c1[g1[2][1]] = g1[2][3]; c1[g1[2][2]] = g1[2][4]; c1[g1[2][3]] = g1[2][1]; c1[g1[2][4]] = g1[2][2]; c1[g1[3][1]] = g1[1][1]; c2[g2[1][1]] = g2[3][1]; c2[g2[2][1]] = g2[2][3]; c2[g2[2][2]] = g2[2][4]; c2[g2[2][3]] = g2[2][1]; c2[g2[2][4]] = g2[2][2]; c2[g2[3][1]] = g2[1][1]; int i; for (i = 1; i <= 6; i++) { if (c1[i] != c2[i]) break; } if (i == 7) { cout << "YES" << hh; return; } } cout << "NO" << hh; return; } //#define test signed main() { #ifdef test freopen("in.in", "r", stdin); freopen("out.out", "w", stdout); #endif ios::sync_with_stdio(0), cin.tie(0), cout.tie(0); int Orz = 1; // cin >> Orz; while (Orz--) { solve(); } return 0; }