zoukankan      html  css  js  c++  java
  • poj 3349 简单hash

    题意:

    每个雪花都有六个分支,用六个整数代表,这六个整数是从任意一个分支开始,朝顺时针或逆时针方向遍历得到的。输入多个雪花,判断是否有形状一致的雪花存在。

    分析:

    简单的哈希,用取余法保存和相同的雪花,然后在判断雪花的各边即可。简单起见,用vector保存。链表麻烦点。


    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<map>
    #include<vector>
    #include<string>
    using namespace std;
    const int mod=100007;
    const int N=100000+9;
    typedef struct node
    {
        int a[6];
    };
    vector<node>s[N];
    bool cmp(node& p,node& q)
    {
        int i,j;
        for(i=0;i<6;i++){
            for(j=0;j<6;j++)if(p.a[j]!=q.a[(i+j)%6])break;
            if(j==6)return true;
        }
        for(i=0;i<6;i++){
            for(j=0;j<6;j++)if(p.a[j]!=q.a[(i-j+6)%6])break;
            if(j==6)return true;
        }
        return false;
    }
    bool check(int id,node& cur)
    {
        for(int i=0;i<s[id].size();i++){
            if(cmp(s[id][i],cur))return true;
        }
        s[id].push_back(cur);return false;
    }
    int main()
    {
       //freopen("f.txt","r",stdin);
        int n,i;
        scanf("%d",&n);
        node p;
        for(i=0;i<n;i++){
            int t=0;
            for(int j=0;j<6;j++)scanf("%d",&p.a[j]),t+=p.a[j];
            t%=mod;
            if(check(t,p)){printf("Twin snowflakes found.
    ");break;}
        }
        if(i==n)printf("No two snowflakes are alike.
    ");
        return 0;
    }


  • 相关阅读:
    Git 安装部署的详细说明
    jmeter数据库连接异常记录
    安装测试真的有那么简单吗?
    5G通信系统简单介绍
    postman 模拟服务器server
    再来对http协议做个详细认识
    关于Fiddler Everywhere的使用说明
    pom模式+ddt思想+logger+allure 重构jpress
    adb常见异常归类
    DDT思想
  • 原文地址:https://www.cnblogs.com/01world/p/5762851.html
Copyright © 2011-2022 走看看