博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 3349 Snowflake Snow Snowflakes
阅读量:4691 次
发布时间:2019-06-09

本文共 1647 字,大约阅读时间需要 5 分钟。

 

大意:给定雪花的六条边长,不论顺序,只要其中有两个雪花六条边的长度都相等,那么输出“Twin snowflakes found”,否则输出“No two snowflakes are alike.”

数据范围:0 < n ≤ 100000each integer is at least 0 and less than 10000000

思路:将每个状态映射进hash表里,由于不论顺序,我们可以在插入hash表的时候预排序一下,然后再映射进hash表里,如果找到,则标记。

注意:如果找到的话,不能直接退出循环,因为题目要求是全部输入完,否则一定会影响后面的结果(影响输入),这里我WA了一次。

CODE:

 

/*
哈希函数
*/
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <algorithm>
using 
namespace std;
const 
int MAXN  = 
1000003;
const 
int N = 
6;
typedef unsigned 
long UL;
typedef 
int State[
6];
int first[MAXN], next[MAXN];
State st[MAXN], temp[MAXN];
char like[
110] = 
"
Twin snowflakes found.\n
";
char unlike[
110] = 
"
No two snowflakes are alike.\n
";
int n;
int flag;
inline 
void init()
{
    flag = 
0;
    memset(first, -
1
sizeof(first));
}
inline 
int hash(State &s)
{
    UL v = 
0;
    
for(
int i = 
0; i < 
6; i++) v =  v*
10 + s[i];
    
return v % MAXN;
}
inline 
int try_to_insert(
int s)
{
    
int h = hash(st[s]);
    
for(
int v = first[h]; v != -
1; v = next[v])
    {
        
if(memcmp(st[v], st[s], 
sizeof(st[s])) == 
0
return 
0;
    }
    next[s] = first[h];
    first[h] = s;
    
return 
1;
}
void solve()
{
    
for(
int j = 
0; j < N; j++) scanf(
"
%d
", &temp[
0][j]);
    sort(temp[
0], temp[
0]+N);
    memcpy(st[
0], temp[
0], 
sizeof(temp[
0]));
    try_to_insert(
0);
    
for(
int i = 
1; i < n; i++)
    {
        
for(
int j = 
0; j < N; j++) scanf(
"
%d
", &temp[i][j]);
        sort(temp[i], temp[i]+N);
        memcpy(st[i], temp[i], 
sizeof(temp[i]));
        
if(!try_to_insert(i))
        {
            flag = 
1;
        }
    }
    printf(
"
%s
", flag? like:unlike); 
//
found, not found.
}
int main()
{
    
int i, j;
    
while(~scanf(
"
%d
", &n))
    {
        init();
        solve();
    }
    
return 
0;
}

 

转载于:https://www.cnblogs.com/g0feng/archive/2012/11/05/2755255.html

你可能感兴趣的文章
webservice整合spring cxf
查看>>
[解题报告] 100 - The 3n + 1 problem
查看>>
Entity Framework 学习高级篇1—改善EF代码的方法(上)
查看>>
Mybatis逆向工程配置文件详细介绍(转)
查看>>
String类的深入学习与理解
查看>>
不把DB放进容器的理由
查看>>
OnePage收集
查看>>
Java parseInt()方法
查看>>
yahoo的30条优化规则
查看>>
[CCF2015.09]题解
查看>>
[NYIST15]括号匹配(二)(区间dp)
查看>>
json_value.cpp : fatal error C1083: 无法打开编译器生成的文件:No such file or directory
查看>>
洛谷 P1101 单词方阵
查看>>
Swift DispatchQueue
查看>>
C#和JAVA 访问修饰符
查看>>
集合框架
查看>>
小甲鱼OD学习第1讲
查看>>
【转】简述生成式对抗网络
查看>>
HDU-1085 Holding Bin-Laden Captive-母函数
查看>>
php提示undefined index的几种解决方法
查看>>