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;
    }
  • 相关阅读:
    serialVersionUID作用
    为什么要使用SLF4J而不是Log4J
    认识Log4j
    Java解析xml文件四种方式
    数据结构之R进制转换
    栈的压入、弹出序列
    中间件学习之RMI+JDBC远端数据库的访问
    Linux程序设计综合训练之简易Web服务器
    Html5笔记之小结
    PhoneGap + Dreamweaver 5.5 无法在模拟器中打开的问题
  • 原文地址:https://www.cnblogs.com/langyao/p/8832448.html
Copyright © 2011-2022 走看看