一、题意

每片雪花是由6个角组成,每片雪花的6个角由顺时针的顺序给出,当两片雪花顺时针或逆时针的角度相同时,则为雪花是同一片雪花。问n片雪花中是否有相同的雪花。

二、题解

  • 我们定义HashHashHash函数Hash=Hash =Hash=(∑i=16ai+∏i=16ai)modp(\sum_{i = 1}^{6}ai+\prod_{i = 1}^{6}ai)mod p(∑i=16​ai+∏i=16​ai)modp。
  • 当两片雪花的Hash相同时,我们则进一步来根据顺序来判断这两片雪花的角度是否完全一致。
  • 我们可以建立将Hash作为表头来创建链式前向星,从而降低复杂度。

三、Acode

/** @Author: NEFU_马家沟老三* @LastEditTime: 2020-09-06 17:11:39* @CSDN blog: https://blog.csdn.net/acm_durante* @E-mail: 1055323152@qq.com* @ProbTitle: */
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i, a, n) for (int i = a; i <= n; i++)
#define per(i, a, n) for (int i = n; i >= a; i--)
#define lowbit(x) ((x) & -(x))
#define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
#define mem(a, b) memset(a, b, sizeof(a))
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
const double PI = acos(-1.0);
const int MAXN = 100050;
const int mod = 99991;
struct node
{int a[7],next;
}e[MAXN];
int head[MAXN],num[7],cnt = 0;int Hash(){//得到Hash函数int sum = 0,mul = 1;rep(i,0,5){sum = (sum + num[i]) % mod;mul = (ll) mul * num[i] % mod;}return (sum + mul) % mod;
}void add(int val){//添加边++cnt;rep(i,0,5){e[cnt].a[i] = num[i];} e[cnt].next = head[val];head[val] = cnt;
}bool equal(int pos){//精确判断角度是否相同bool flag = 0;rep(i,0,5){rep(j,0,5){flag = 0;rep(k,0,5){if(e[pos].a[ (i+k) % 6] != num[( j + k) % 6]) flag = 1;}if( flag == 0 ) return 1;flag = 0;rep(k,0,5){if(e[pos].a[(i+k)%6] != num[(6 + j - k) % 6] ) flag = 1;}if(!flag) return 1;}}return 0;
}bool solve(){int val = Hash();for(int i = head[val] ; ~i ; i = e[i].next){//遍历链式前向星if(equal(i)) return 1;}add(val);return 0;
}
int main()
{int n;mem(head,-1);scanf("%d",&n);rep(i,1,n){rep(j,0,5)scanf("%d",&num[j]);if(solve()){puts("Twin snowflakes found.");return 0;}}puts("No two snowflakes are alike.");return 0;
}

Snowflake Snow Snowflakes(Hash + 链式前向星)相关推荐

  1. Balkan2007]Toponyms[链式前向星建字典树+getchar()读入优化]

    思路容易想,卡空间和时间就吐了 用链式前向星压缩空间,用getchar()一位一位读加快读入 #include <iostream> #include <cstdio> #in ...

  2. P3366 【模板】最小生成树(链式前向星,prim,有坑)难度⭐⭐

    题目链接 输入: 4 5 1 2 2 1 3 2 1 4 3 2 3 4 3 4 3 输出: 7 链式前向星相比于矩阵,遍历的代码更加复杂一点,但是省空间,这道题用矩阵存就MLE,只能用链式前向星存. ...

  3. P1155 双栈排序(二分图的染色判断+链式前向星)

    P1155 双栈排序 让字典序最小,当然尽量进S1 那什么时候必须进S2呢? a[i]和a[j] 不能压入同一个栈⇔存在一个k,使得i<j<k且a[k]<a[i]<a[j] 因 ...

  4. 邻接表存储(链式前向星)

    细节 链式前向星: head[i] 存储顶点i当前出边的编号 to[num] 存储当前出边的终点 w[num] 存储当前出边的权值 next[num] 存储上一条从顶点i出发的边的边号 N个顶点对应N ...

  5. 可持久化链表(链式前向星)

    http://codeforces.com/group/aUVPeyEnI2/contest/229670 1 /******************************************* ...

  6. 链式前向星模板 建图+dfs+bfs+dijkstra

    边没有用struct封装起来,节点和边的计数起点如果不符合习惯可以稍作修改 建图+DFS+BFS #include <cstdio> #include <cstring> #i ...

  7. 图的存储 邻接矩阵+邻接表+链式前向星

    图的存储 - 邻接矩阵 在树的问题中,邻接矩阵是空间.时间的极大浪费. 假设树的结点个数为 N = 100000. 建立邻接矩阵需要空间为 1e5*1e5 但是由于只有 N - 1 条边,所以在邻接矩 ...

  8. 图的储存方式,链式前向星最简单实现方式 (边集数组)

    对于图来说,储存方式无非就是邻接矩阵.邻接表,今天看了看链式前向星的储存方式,说来说去不还是链表,是一种链表的简单的实现方式,还是比较好理解的.看他们写个结构体,个人不喜欢,没必要,也嫌麻烦,换一种更 ...

  9. 存图利器——链式前向星

    存图的各种数据结构,复杂如下 邻接矩阵    O(1)(查询一条边)      O(n)枚举出边    O(N*N)空间复杂度 前向星 O(n)(查询一条边)      O(n)枚举出边    O(N ...

最新文章

  1. Jmeter(二十九)_dotnet搭建本地接口服务
  2. 还记得那个提速8倍的IDEA插件吗?VS Code版本也发布啦!
  3. [你必须知道的.NET]第二十七回:interface到底继承于object吗?
  4. ZedGraph5.1.5源码分析去掉鼠标悬浮内容闪烁问题(附源码下载)
  5. 4键电子手表说明书_数字S1系统7寸门口主机操作说明书
  6. 【君义精讲】多种方法求斐波那契数列
  7. SetTimer OnTimer WM_TIMER
  8. oracle 9.2.0.1下载,Oracle 9i 从9.2.0.1升级到 9.2.0.6 步骤
  9. 三七互娱U3D面经2021.3.31
  10. 从CSDN用户密码泄露谈一些非技术安全对策
  11. 笔记--《谷歌和亚马逊是怎么做产品的》第一至三章
  12. 如何检测java安装成功_如何检查jdk是否安装成功
  13. ToStringBuilder用法
  14. IEC61850学习手册
  15. 服务器显示屏 超出工作频率范围,如何解决显示器出错提示:超出工作频率范围...
  16. 我的Android进阶之旅------android中一些特殊字符(如:←↑→↓等箭头符号)的Unicode码值
  17. 【Python爬虫历程】使用Cookie来模拟登陆
  18. etc门架系统服务器是什么,ETC门架是什么东西?ETC龙门架作用
  19. mysql异常Incorrect string value: ‘\xE6\xB5\x8B\xE8\xAF\x95‘ for column ‘region_name‘
  20. 电子技术部第四次培训总结

热门文章

  1. IDEA报错:不支持发行版本
  2. 英文标点符号unicode
  3. LSF_安装(UNIX or Linux)
  4. 徐州地区地理生物计算机考试试题,2020年初中学业水平考试 地理、生物7月14日开考...
  5. S32K116调试记录(1)SWD接口调试
  6. html页面设置账号密码,html登录界面设置账号密码
  7. 计计算机类学科代码是多少,高校专业代码表
  8. slack软件怎么用
  9. 使用 AutoHotKey 配合Win10分屏功能
  10. 在Ubuntu上编译gptfdisk的方法