题目链接:点击这里

题目大意:
给定一个长为 nnn ,宽为 mmm 的 010101 矩阵, 111 代表连通(连通形式为 888 连通),将每一个联通块标上相同的字母,形态相似(通过对称旋转可转换成同一种形式)的连通块字母也要相同,输出标记后的矩阵

题目分析:
求连通块可以使用 floodfillflood\ fillflood fill 的搜索方式进行搜索,此题的关键是如何通过哈希来判断连通块形态相似
给出一种哈希函数为:求连通块内所有点的两点距离之和
此哈希值是一个浮点数,但切记不可不开根号,因为距离平方和是一个大概率会冲突的哈希函数,而距离和冲突概率则会小很多
如果只使用此哈希还是出现了冲突则需要引入新的哈希来减小冲突(此题不需要)

具体细节见代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<set>
#include<map>
#define ll long long
#define inf 0x3f3f3f3f
#define Inf 0x3f3f3f3f3f3f3f3f
//#define int ll
using namespace std;
int read()
{int res = 0,flag = 1;char ch = getchar();while(ch<'0' || ch>'9'){if(ch == '-') flag = -1;ch = getchar();}while(ch>='0' && ch<='9'){res = (res<<3)+(res<<1)+(ch^48);//res*10+ch-'0';ch = getchar();}return res*flag;
}
const int maxn = 105;
const int mod = 1e9+7;
const double pi = acos(-1);
const double eps = 1e-8;
struct node{int x,y;
}nod[maxn*maxn];
int n,m,x,cnt,id='a';
char a[maxn][maxn];
void dfs(int x,int y)
{nod[++cnt].x = x;nod[cnt].y = y;a[x][y] = '0';for(int i = x-1;i <= x+1;i++)for(int j = y-1;j <= y+1;j++){if(i==x && j==y) continue;if(a[i][j] == '1') dfs(i,j);}
}
double get_hash()
{double res = 0;for(int i = 1;i <= cnt;i++)for(int j = i+1;j <= cnt;j++)res += sqrt((nod[i].x-nod[j].x)*(nod[i].x-nod[j].x)+(nod[i].y-nod[j].y)*(nod[i].y-nod[j].y));return res;
}
char get_id(double key)
{static double hash[30];static int id = 0;for(int i = 1;i <= id;i++) if(fabs(key-hash[i]) < eps) return i-1+'a';hash[++id] = key;return id-1+'a';
}
signed main()
{m = read(),n = read();for(int i = 1;i <= n;i++) scanf("%s",a[i]+1);for(int i = 1;i <= n;i++)for(int j = 1;j <= m;j++)if(a[i][j] == '1') {cnt = 0,dfs(i,j);char ch = get_id(get_hash());for(int k = 1;k <= cnt;k++) a[nod[k].x][nod[k].y] = ch;}for(int i = 1;i <= n;i++) puts(a[i]+1); return 0;
}

Acwing 1402. 星空之夜(搜索+哈希)相关推荐

  1. AcWing 1402. 星空之夜 1月28

    AcWing 1402. 星空之夜 1月28 题意: 一个星群是指一组非空的在水平,垂直或对角线方向相邻的星星的集合. 一个星群不能是一个更大星群的一部分. 星群可能是相似的. 如果两个星群的形状.包 ...

  2. 相似图片搜索--哈希特征值

    文章目录 相似图片搜索--哈希特征值 简介 思路 实现方法 从文件夹读取图片 压缩图片 色彩处理 计算哈希值 比较哈希值 参考资料 相似图片搜索–哈希特征值 简介 搜索方法是计算出每一个图片的特征值, ...

  3. 【AcWing 学习】图论与搜索

    图论与搜索 搜索与图论 深度优先搜索 DFS 排列数字 N 皇后 宽度优先搜索 BFS 走迷宫 树和图的存储 树和图的深度优先遍历 树的重心 树和图的宽度优先遍历 图中点的层次 拓扑排序 有向图的拓扑 ...

  4. UVa 10118 免费糖果(记忆化搜索+哈希)

    https://vjudge.net/problem/UVA-10118 题意: 桌上有4堆糖果,每堆有N颗.佳佳有一个最多可以装5颗糖的小篮子.他每次选择一堆糖果,把最顶上的一颗拿到篮子里.如果篮子 ...

  5. [九省联考2018]一双木棋chess——搜索+哈希

    题目:bzoj5248 https://www.lydsy.com/JudgeOnline/problem.php?id=5248 洛谷P4363 https://www.luogu.org/prob ...

  6. 寒假每日一题(提高组)【Week 1 完结】

    目录 1402. 星空之夜[dfs + 哈希] 479. 加分二叉树[DP] 1414. 牛异或[trie] 1402. 星空之夜[dfs + 哈希] https://www.acwing.com/p ...

  7. 相似图片搜索的三种哈希算法

    想必大家都用google或baidu的识图功能,上面就是我搜索冠希哥一幅图片的结果,达到图片比较目的且利用信息指纹比较有三种算法,这些算法都很易懂,下面分别介绍一下: 一.平均哈希算法(aHash) ...

  8. 五分钟带你了解哈希算法

    导读: 当新人在学区块链技术的时候,都会听到哈希和哈希算法,这似乎是无处不在的安全性保证.例如比特币或者以太坊这种运行去中心化网络和共识的机器,都会有上万个节点通过P2P连接,并且需要"无需 ...

  9. 0x22.搜索 - 深度优先搜索

    目录 一.DFS三个经典NPC问题 1.子集和问题 2.全排列问题 3.N皇后问题 luogu P1219 [USACO1.5]八皇后 Checker Challenge luogu P1562 还是 ...

  10. 基于特征选择的局部敏感哈希位选择算法

    点击上方蓝字关注我们 基于特征选择的局部敏感哈希位选择算法 周文桦, 刘华文, 李恩慧 浙江师范大学数学与计算机科学学院,浙江 金华 321001 摘要:作为主流的信息检索方法,局部敏感哈希往往需要生 ...

最新文章

  1. zabbix 概念理解
  2. sftp进入指定目录_CentOS7服务搭建----搭建SFTP(安全文件传送协议)服务器
  3. Payment Spring Boot 1.0.2.RELEASE 发布,接入微信支付分、先享卡功能
  4. c++string类默认函数实现
  5. 《数据库SQL实战》查找入职员工时间排名倒数第三的员工的所有信息
  6. BeetleX之Web网关1.5.7安装使用
  7. 华为s8600手机驱动_只有手机才能快充?华为MateBook X的灵巧快充解放你的续航焦虑-华为 ——快科技(驱动之家旗下媒体)-...
  8. css3制作俩面翻转盒子效果
  9. AOAPC I: Beginning Algorithm Contests 题解
  10. 使用C++模板判断两个类型是否一样
  11. 采购计算机申请,采购申请报告格式
  12. 如何调换手机桌面位置_手机桌面很乱怎么整理?简单七招让你效率更高!
  13. 神来之笔--图解JVM内存分配及对象存储
  14. 使用uiautomatorviewer报错Error obtaining UI hierarchy
  15. 孙空空的Vue之路-Day03-Class与Style的绑定操作
  16. 如何评价深度学习相关顶级期刊论文难复现的问题?
  17. jkd动态代理源码分析
  18. 【把视频逐帧转换成图片】
  19. 正弦波产生电路_文氏桥振荡
  20. java将多个文件写入到一个文件流中再有规律的取出_编写java程序,往一个txt文件里写入学生的基本信息,然后再读出这些信息并打印出来,最后把该文件拷贝到指...

热门文章

  1. 《最重要的事,只有一件》读书笔记
  2. [VS code - SSH Remote] ln: failed to create hard link ... File exists
  3. Java GUI 表白程序 | 源码
  4. A6 词根:-vict- = -vinc-;单词:evince、vincible
  5. shenyu2.5.0对restful的path中文不支持,400错误解决
  6. 共享远程计算机文件夹,怎么远程访问共享文件夹
  7. RPM包安装相关命令
  8. cmd打开计算机窗口,如何打开命令行窗口,详细教您电脑怎么打开cmd命令行窗口...
  9. 主要几个浏览器的内核是什么
  10. iOS App 签名的原理 App 重签名(一)