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


  • 相关阅读:
    java之this关键字
    单位转换类UnitUtil2
    重量WeightFormatUtil辅助类
    语音提示辅助类MySoundAlertUtil
    Android 编程下 Touch 事件的分发和消费机制
    switch case语句的用法
    Struts2之环境配置
    CSS属性绘制图形(一)
    jquery $(document).ready() 与window.onload的区别
    Android开发之ActionBar
  • 原文地址:https://www.cnblogs.com/01world/p/5762851.html
Copyright © 2011-2022 走看看