Snowflake Snow Snowflakes poj-3349

    题目大意:给出n片雪花,每片雪花有6个角,每个角有一个权值。如果两片雪花中能够各选出一个点,使得从该点顺时针或者逆时针转,得到的权值序列完全相符,那么我们就说这两片雪花是完全相同的。

    注释:$1\le n\le 10^5$。

      想法:其实并不是一道真正意义上的hash。我们对每个雪花进行处理:如果两个雪花a,b,满足:

        $\sum\limits_{i=1}^{6} a_i+\prod\limits_{i=1}^{6}a_i$相等,我们就说这两片雪花是相等的。

      之后,用链表遍历上述值相等的雪花即可,这道题我们选择在线处理(orz lyd)。

    最后,附上丑陋的代码... ...

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#define SIZE 100010
#define mod 49999
using namespace std;
typedef long long ll;
int snow[SIZE][6],head[SIZE],nxt[SIZE];
int n;
int Hash(int *a)
{
int sum=0,mul=1;
for(int i=0;i<6;i++)
{
sum=(sum+a[i])%mod;
mul=(ll)mul*a[i]%mod;
}
return (sum+mul)%mod;
}
bool equal(int *a,int *b)
{
for(int i=0;i<6;i++)
{
for(int j=0;j<6;j++)
{
bool flag=1;
for(int k=0;k<6;k++)
{
if(a[(i+k)%6]!=b[(j+k)%6]) flag=false;
}
if(flag) return true;
flag=true;
for(int k=0;k<6;k++)
{
if(a[(i+k)%6]!=b[(j-k+6)%6]) flag=false;
}
if(flag) return true;
}
}
return false;
}
int tot;
bool insert(int *a)
{
int val=Hash(a);
for(int i=head[val];i;i=nxt[i])
{
if(equal(snow[i],a)) return true;
}
++tot;
memcpy(snow[tot],a,6*sizeof(int));
nxt[tot]=head[val];
head[val]=tot;
return false;
}
int main()
{
cin >> n;
for(int i=1;i<=n;i++)
{
int a[10];
for(int j=0;j<6;j++)
{
scanf("%d",&a[j]);
}
if(insert(a))
{
puts("Twin snowflakes found.");
return 0;
}
}
puts("No two snowflakes are alike.");
return 0;
}

    小结:hash好强啊,精髓在于将字符串等价成整数,所以方便处理。

[poj3349]Snowflake Snow Snowflakes_hash的更多相关文章

  1. [poj3349]Snowflake Snow Snowflakes(hash)

    Snowflake Snow Snowflakes Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 37615 Accepted: ...

  2. POJ--3349 Snowflake Snow Snowflakes(数字hash)

    链接:Snowflake Snow Snowflakes 判断所有的雪花里面有没有相同的 每次把雪花每个角的值进行相加和相乘 之后hash #include<iostream> #incl ...

  3. poj3349 Snowflake Snow Snowflakes【HASH】

    Snowflake Snow Snowflakes Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 49991   Accep ...

  4. POJ3349 Snowflake Snow Snowflakes (hash

    Snowflake Snow Snowflakes Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 48624   Accep ...

  5. POJ-3349 Snowflake Snow Snowflakes---最小表示法

    题目链接: https://vjudge.net/problem/POJ-3349 题目大意: 每个雪花都有六个分支,用六个整数代表,这六个整数是从任意一个分支开始,朝顺时针或逆时针方向遍历得到的.输 ...

  6. poj3349 Snowflake Snow Snowflakes

    吼哇! 关于开散列哈希: 哈希就是把xxx对应到一个数字的东西,可以理解成一个map<xxx, int>(是不是比喻反了) 我们要设计一个函数,这个函数要确保同一个东西能得到相同的函数值( ...

  7. POJ3349 Snowflake Snow Snowflakes (JAVA)

    首先声明代码并没有AC,内存超了 但我对此无能为力,有没有哪位大神好心教一下怎么写 哈希,然后比较花瓣数组,这些应该都没问题才对..唉.. 贴MLE代码 import java.util.*; pub ...

  8. poj3349 Snowflake Snow Snowflakes —— 哈希表

    题目链接:http://poj.org/problem?id=3349 题意:雪花有6个瓣,有n个雪花,输入每个雪花的瓣长,判断是否有一模一样的雪花(通过旋转或翻转最终一样,即瓣长对应相等).如果前面 ...

  9. POJ3349: Snowflake Snow Snowflakes(hash 表)

    考察hash表: 每一个雪花都有各自的6个arm值,如果两个雪花从相同或者不同位置开始顺时针数或者逆时针数可以匹配上,那么这两个雪花就是相等的. 我们采用hash的方法,这样每次查询用时为O(1),总 ...

随机推荐

  1. ATCA构架

    ATCA(Advanced Telecom Computing Architecture)标准即先进的电信计算平台,它脱胎于在电信.航天.工业控制.医疗器械.智能交通.军事装备等领域应用广泛的新一代主 ...

  2. ubuntu14.04 64位 安装eclipse出错

    1 错误描述 org.eclipse.m2e.logback.configuration: The org.eclipse.m2e.logback.configuration bundle was a ...

  3. 加深try catch Finnly的理解

    上代码 public String twoGetFeeInfoByWithUnit(JSONArray jsonArray,String key1,String key2){ String Debit ...

  4. VS2010插件

    Highlight all occurrences of selected words

  5. Luogu3242:[HNOI2015]接水果

    题面 Luogu3242 Sol 考虑每个盘子怎样才能接到一个水果 分两种情况: 盘子的\(x, y\)在一条链上,那么水果的两点就要在这条链之外 不在的话,水果的两点就分别在盘子的两点的子树中 记录 ...

  6. UVA10692:Huge Mods

    题面 传送门 题意 输入正整数a1,a2,a3..an和模m,求a1^a2^...^an mod m Sol 首先有\[ a^b\equiv \begin{cases} a^{b\%\phi(p)}~ ...

  7. redis的常用公共方法

    实用redis已经有一段时间了,今天刚好有空记录一下所用到的方法,欢迎指正 首先我封装了一些字段信息 #region 字段 /// <summary> /// Redis服务器地址 /// ...

  8. mongo分布式集群搭建手记

    一.架构简介 目标 单机搭建mongodb分布式集群(副本集 + 分片集群),演示mongodb分布式集群的安装部署.简单操作. 说明 在同一个vm启动由两个分片组成的分布式集群,每个分片都是一个PS ...

  9. 应用canvas绘制动态时钟--每秒自动动态更新时间

    使用canvas绘制时钟 下文是部分代码,完整代码参照:https://github.com/lemoncool/canvas-clock,可直接下载. 首先看一下效果图:每隔一秒会动态更新时间 一. ...

  10. 关于word2016中mathtype无法使用以及“由于宏安全设置,无法找到宏或宏已被禁用”的解决方案

    版本描述: 系统:win10 64位 word: 2016版 32位 Mathtype: 6.9d (6.9b也出现相同问题,应该可以通过相同的方法解决) 问题描述: 自从在一次win10更新之后,w ...