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;
}


全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务