zoukankan      html  css  js  c++  java
  • nyoj-130-相同的雪花(hash)

     题目链接

    /*
        Name:NYOJ-130-相同的雪花 
        Copyright:
        Author:
        Date: 2018/4/14 15:13:39
        Description:
        将雪花各个分支上的值加起来,hash
    */
    #include <iostream>
    #include <vector>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    const int MAXN = 1e5+10;
    int snowflakes[MAXN][7];
    vector<int> snow[5001];//hash
    int Like(int x,int y)//判断两片雪花是否相同 
    {
        for(int i=0;i<6;i++)
        {
            if((snowflakes[x][0]==snowflakes[y][i]&&snowflakes[x][1]==snowflakes[y][(i+1)%6]&&snowflakes[x][2]==snowflakes[y][(i+2)%6]&&snowflakes[x][3]==snowflakes[y][(i+3)%6]&&snowflakes[x][4]==snowflakes[y][(i+4)%6]&&snowflakes[x][5]==snowflakes[y][(i+5)%6])///顺时针方向判断两个雪花是否相同
             ||(snowflakes[x][0]==snowflakes[y][(i+5)%6]&&snowflakes[x][1]==snowflakes[y][(i+4)%6]&&snowflakes[x][2]==snowflakes[y][(i+3)%6]&&snowflakes[x][3]==snowflakes[y][(i+2)%6]&&snowflakes[x][4]==snowflakes[y][(i+1)%6]&&snowflakes[x][5]==snowflakes[y][i]))///逆时针方向判断两个雪花是否相同
                return 1;
        }
        return 0;
    }
    int main()
    {
    //    freopen("in.txt", "r", stdin);
        int t;
        cin>>t;
        while (t--) {
            memset(snow, 0, sizeof(snow));
            int n;
            cin>>n;
            for (int i=0; i<n; i++) {
                int sum = 0;
                for (int j=0; j<6; j++) {
                    int tmp;
                    cin>>tmp;
                    snowflakes[i][j] = tmp;
                    sum += tmp;
                }
                sum = sum % 5000;//防止越界
                snow[sum].push_back(i);
            }
            int flag = 0 ;
            for (int i=0; i<5000; i++) {
                if (flag) break;
                if (snow[i].size() < 2) continue;
                for (int j=0; j<snow[i].size()-1; j++) {
                    for (int k=j+1; k<snow[i].size(); k++) {
                        if (Like(snow[i][j], snow[i][k])) {
                            flag = 1;
                            break;
                        }
                        
                    }
                }
            }
            if(flag)printf("Twin snowflakes found.
    ");  
                else printf("No two snowflakes are alike.
    ");  
        }
        return 0;
    }
  • 相关阅读:
    树型表的设计 上海
    FTP通讯封装 上海
    线程淡写 上海
    TCP通讯故障 上海
    设计模式引导 上海
    初试Delegate 上海
    c# 扫描端口 上海
    攻读计算机研究生的看法(转载) 上海
    挖掘表字段中的汉字 上海
    新生活运动 上海
  • 原文地址:https://www.cnblogs.com/slothrbk/p/8832448.html
Copyright © 2011-2022 走看看