POJ 3349 HASH
题目链接: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的更多相关文章
- Snowflake Snow Snowflakes POJ - 3349 Hash
题意:一个雪花有六个角 给出N个雪花 判断有没有相同的(可以随意旋转) 参考:https://blog.csdn.net/alongela/article/details/8245005 注意:参考 ...
- Snowflake Snow Snowflakes - poj 3349 (hash函数)
判断n朵雪花中,是否有完全一样的雪花.简单的hash,将雪花的六个边的权值加起来,记为sum,将sum相等的雪花归为一类,再在这里面根据题意找完全相同的,判断顺时针或者逆时针的所有角是否一模一样. # ...
- POJ 3349:Snowflake Snow Snowflakes(数的Hash)
http://poj.org/problem?id=3349 Snowflake Snow Snowflakes Time Limit: 4000MS Memory Limit: 65536K T ...
- POJ 3349 Snowflake Snow Snowflakes Hash
题目链接: http://poj.org/problem?id=3349 #include <stdio.h> #include <string.h> #include < ...
- [poj 3349] Snowflake Snow Snowflakes 解题报告 (hash表)
题目链接:http://poj.org/problem?id=3349 Description You may have heard that no two snowflakes are alike. ...
- hash应用以及vector的使用简介:POJ 3349 Snowflake Snow Snowflakes
今天学的hash.说实话还没怎么搞懂,明天有时间把知识点总结写了,今天就小小的写个结题报告吧! 题意: 在n (n<100000)个雪花中判断是否存在两片完全相同的雪花,每片雪花有6个角,每个角 ...
- POJ 3349 Snowflake Snow Snowflakes (Hash)
Snowflake Snow Snowflakes Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 48646 Accep ...
- 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 ...
- POJ 3349 Snowflake Snow Snowflakes(哈希)
http://poj.org/problem?id=3349 题意 :分别给你n片雪花的六个角的长度,让你比较一下这n个雪花有没有相同的. 思路:一开始以为把每一个雪花的六个角的长度sort一下,然后 ...
随机推荐
- 针对Xcode的警告忽略消除处理
一.问题描述 html代码如下 <html> <head> <meta charset="utf-8"/> <title>我的网页& ...
- DOM动画效果基础入门
一.什么是DOM? Document Object Model文档对象模型 当创建一个网页并把它加载到web浏览器中时,如果没有document(文档): DOM根据你编写的网页文档创建一个文档对象 ...
- chaper3_exerise_Uva1368_DNA序列
#include<iostream> #include<stdio.h> #include<cmath> #include<string> #inclu ...
- NYOJ题目1162数字
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAr8AAAJ/CAIAAAD+kywNAAAgAElEQVR4nO3dO1LjzN4H4G8T5CyE2A ...
- 3.2 STL中的函数对象类模板
*: STL中有一些函数对象类模板,如下所示: 1)例如要求两个double类型的x 和y 的积,可以: multiplies<double>()(x,y); 该表达式的值就是x*y的值. ...
- 学习hibernate @Entity该导入哪个包
1.在@Entity时很容易顺手导入@org.hibernate.annotations.Entity这个包,结果导致了异常.其实应该导入的是@javax.persistence.Entity Alw ...
- php连接sql server
这两天有个php连接sql server的项目,顺便学习学习sql server 说明: 1:PHP5.2.x本身有个php_mssql.dll的扩展用来连接Sql server,但是这个dll只是 ...
- php JS和JQ
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Genymotion
@Genymotion相关文件下载地址 http://pan.baidu.com/s/1nu9nReh @虚拟机网络代理设置 Normal 0 7.8 磅 0 2 false false false ...
- 查看局域网内在线的主机ip和mac地址
]# nmap -sP Starting Nmap 5.51 ( http://nmap.org ) at 2016-12-12 22:43 CST Nmap scan report for 192. ...