题目链接:http://poj.org/problem?id=3349

题意:你可能听说话世界上没有两片相同的雪花,我们定义一个雪花有6个瓣,如果存在有2个雪花相同[雪花是环形的,所以相同可以是旋转过后相同]则输出“Twin snowflakes found.”,否则输出“No two snowflakes are alike.”。

思路:最简单的就是两两判断,但是这样的复杂度为O(n^2),TLE。所以我们要尽量减少判断次数,我们用把拥有6个瓣的雪花HASH成一个数字,只有两个雪花用有相同HASH值时才有"可能"相同,然后HASH难免会有冲突,所以用拉链法解决冲突。

#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<cstdio>
#include<vector>
#include<cmath>
#include<time.h>
#include<set>
using namespace std;
typedef long long int LL;
const int MAXN=+;
const int MOD=;
int Num[MAXN][]; //data storage
struct Node{
int id,next;
}Snow[MAXN];
int Scnt,Head[MOD];//list table
void Init(){ //initialization
memset(Head,-,sizeof(Head));
Scnt=;
}
void AddNode(int HashN,int idx){
Snow[Scnt].id=idx;
Snow[Scnt].next=Head[HashN];
Head[HashN]=Scnt++;
}
bool cmp(int idx,int idy){ //compare two Snowflake
for(int i=;i<;i++){ //Sequence order
bool flag=true;
for(int st=i,j=;j<;j++,st=(st+==?:st+)){
if(Num[idx][st]!=Num[idy][j]){
flag=false;
}
}
if(flag){
return true;
}
}
for(int i=;i<;i++){ //Reverse order
bool flag=true;
for(int st=i,j=;j<;j++,st=(st-==(-)?:st-)){
if(Num[idx][st]!=Num[idy][j]){
flag=false;
}
}
if(flag){
return true;
}
}
return false;
}
bool solve(int id){
int HashNum=;
for(int i=;i<;i++){ // make hash
HashNum=(HashNum%MOD+(Num[id][i])%MOD)%MOD;
}
for(int i=Head[HashNum];i!=-;i=Snow[i].next){//get the same hash value
if(cmp(id,i)){//compare
return true;
}
}
AddNode(HashNum,id); //insert into hash table
return false;
}
int main(){
#ifdef kirito
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
int start=clock();
int n,val;
while(~scanf("%d",&n)){
bool flag=false; Init();
for(int i=;i<n;i++){
for(int j=;j<;j++){
scanf("%d",&Num[i][j]);
}
if(flag){continue;}
if(solve(i)){
flag=true;
}
}
if(!flag){
printf("No two snowflakes are alike.\n");
}
else{
printf("Twin snowflakes found.\n");
}
}
#ifdef LOCAL_TIME
cout << "[Finished in " << clock() - start << " ms]" << endl;
#endif
return ;
}

POJ 3349 HASH的更多相关文章

  1. Snowflake Snow Snowflakes POJ - 3349 Hash

    题意:一个雪花有六个角  给出N个雪花 判断有没有相同的(可以随意旋转) 参考:https://blog.csdn.net/alongela/article/details/8245005 注意:参考 ...

  2. Snowflake Snow Snowflakes - poj 3349 (hash函数)

    判断n朵雪花中,是否有完全一样的雪花.简单的hash,将雪花的六个边的权值加起来,记为sum,将sum相等的雪花归为一类,再在这里面根据题意找完全相同的,判断顺时针或者逆时针的所有角是否一模一样. # ...

  3. POJ 3349:Snowflake Snow Snowflakes(数的Hash)

    http://poj.org/problem?id=3349 Snowflake Snow Snowflakes Time Limit: 4000MS   Memory Limit: 65536K T ...

  4. POJ 3349 Snowflake Snow Snowflakes Hash

    题目链接: http://poj.org/problem?id=3349 #include <stdio.h> #include <string.h> #include < ...

  5. [poj 3349] Snowflake Snow Snowflakes 解题报告 (hash表)

    题目链接:http://poj.org/problem?id=3349 Description You may have heard that no two snowflakes are alike. ...

  6. hash应用以及vector的使用简介:POJ 3349 Snowflake Snow Snowflakes

    今天学的hash.说实话还没怎么搞懂,明天有时间把知识点总结写了,今天就小小的写个结题报告吧! 题意: 在n (n<100000)个雪花中判断是否存在两片完全相同的雪花,每片雪花有6个角,每个角 ...

  7. POJ 3349 Snowflake Snow Snowflakes (Hash)

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

  8. Snowflake Snow Snowflakes POJ - 3349(hash)

    You may have heard that no two snowflakes are alike. Your task is to write a program to determine wh ...

  9. POJ 3349 Snowflake Snow Snowflakes(哈希)

    http://poj.org/problem?id=3349 题意 :分别给你n片雪花的六个角的长度,让你比较一下这n个雪花有没有相同的. 思路:一开始以为把每一个雪花的六个角的长度sort一下,然后 ...

随机推荐

  1. (2016弱校联盟十一专场10.5) F. Fibonacci of Fibonacci

    题目链接 题目大意就是这个,先找出下标的循环节,再快速幂对20160519取余就行了. 找出下标循环节: #include <cstdio> #include <iostream&g ...

  2. LightOJ 1236 - Pairs Forming LCM(素因子分解)

    B - Pairs Forming LCM Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu ...

  3. IOS-Uikit框架介绍

    •UIKit可识别三种类型的输入事件: –触摸事件 –运动(加速计)事件 –远程控制事件 IKit框架将触击信息封装为一个UIEvent对象,并派发给恰当的视图(有关UIKit如何将事件递送给您的视图 ...

  4. 配置TFS2010的用户截图

    先要添加一个管理用户

  5. VAssistX的VA Snippet Editor的类注释和函数注释

    title:类注释shortcut:=== /******************************************************** [DateTime]:$YEAR$.$M ...

  6. JS中级 - 03:文档宽高及窗口事件(选)

    可视区尺寸 document.documentElement.clientWidth document.documentElement.clientHeight 滚动距离 document.body. ...

  7. elementar OS体验

    关于其说明请参考https://linuxtoy.org/archives/elementary-os-luna.html

  8. POJ2065 SETI(高斯消元 同模方程)

    (a1 * 1^0  +   a2 * 1^1  + ...  an * 1^n - 1) % P = f1 .... (a1 * n^0  +   a2 * n^1  + ...  an - 1 * ...

  9. Installing MySQL Server on CentOS

    MySQL is an open-source relational database. For those unfamiliar with these terms, a database is wh ...

  10. CI框架获取post和get参数 CodeIgniter

    请参考:CI文档的输入类部分: $this->input->post() $this->input->get() ------------------------------- ...