哈希的一些题目

news2024/12/27 13:13:49

题目1:星空之夜

1402. 星空之夜 - AcWing题库

刚开始看到这个题目感觉一懵,因为这个哈希是关于形状的哈希,不知道要怎么表示。

但是这道题的数据范围比较小,暴力也可以过。

暴力的方法是:搜索每一个连通块并保存下来,当遇到一个新的连通块,枚举其变换可达的8种状态,与之前存储过的连通块进行比较。这样做下来需要进行的操作次数是500*26*8*160=16,640,000。

接下来介绍哈希的方法。

这道题有一个独特的哈希方式,背过就好了,那就是:

联通块中的所有点到其余每个点的欧式距离总和。

#include<iostream>
#include<vector>
#include<cmath>
#include<algorithm>

using namespace std;
const int N=110;
typedef pair<int,int> PII;
const double eps=1e-8;
#define x first
#define y second
int h,w;
char g[N][N];
int dx[8]={1,1,1,0,0,-1,-1,-1};
int dy[8]={1,-1,0,1,-1,1,-1,0};

vector<PII> dist;
double ha[30];
void dfs(int x,int y)
{
    dist.push_back({x,y});
    g[x][y]='0';
    for(int i=0;i<8;i++)
    {
        int cx=x+dx[i],cy=y+dy[i];
        if(cx<0||cx>=h||cy<0||cy>=w) continue;
        if(g[cx][cy]!='1') continue;
        dfs(cx,cy);
    }
}
double cal(PII a,PII b)
{
    int x1=a.x,y1=a.y,x2=b.x,y2=b.y;
    return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
double cal_dist()
{
    double res=0;
    for(int i=0;i<dist.size();i++)
        for(int j=i+1;j<dist.size();j++) res+=cal(dist[i],dist[j]);
    return res;
}
int main()
{
    scanf("%d%d",&w,&h);
    for(int i=0;i<h;i++) scanf("%s",g[i]);
    int cnt=-1;
    for(int i=0;i<h;i++)
        for(int j=0;j<w;j++)
        {
            if(g[i][j]=='1') 
            {
                dist.clear();
                dfs(i,j);
                double di=cal_dist();
                bool flag=0;
                int num=-1;
        
                for(int i=0;i<=cnt;i++)
                {
                    if(abs(ha[i]-di)<eps) 
                    {
                        flag=1; 
                        num=i;
                        break;
                    }
                }
                if(flag==0) 
                {
                    ha[++cnt]=di;
                    num=cnt;
                }
                for(int i=0;i<dist.size();i++)
                {
                    int x=dist[i].x,y=dist[i].y;
                    g[x][y]='a'+num;
                }
            }
        }
    for(int i=0;i<h;i++)
    {
        for(int j=0;j<w;j++) cout<<g[i][j];
        cout<<endl;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1549622.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis中的客户端(一)

客户端 概述 Redis服务器是典型的一对多服务器程序:一个服务器可以与多个客户端建立网络连接&#xff0c;每个客户端可以向服务器发送命令请求&#xff0c;而服务器则接收并处理客户端发送的命令请求&#xff0c;并向客户端返回命令回复。通过使用由IO多路复用技术实现的文件…

LeetCode:1319. 连通网络的操作次数(并查集 Java)

目录 1319. 连通网络的操作次数 题目描述&#xff1a; 实现代码与解析&#xff1a; 并查集 原理思路&#xff1a; 1319. 连通网络的操作次数 题目描述&#xff1a; 用以太网线缆将 n 台计算机连接成一个网络&#xff0c;计算机的编号从 0 到 n-1。线缆用 connections 表示…

JAVA面试大全之JVM和调休篇

目录 1、类加载机制 1.1、类加载的生命周期&#xff1f; 1.2、类加载器的层次? 1.3、Class.forName()和ClassLoader.loadClass()区别? 1.4、JVM有哪些类加载机制&#xff1f; 2、内存结构 2.1、说说JVM内存整体的结构&#xff1f;线程私有还是共享的&#xff1f; 2.2…

.NET高级面试指南专题二十三【 B+ 树作为索引有什么优势】

B 树作为索引有许多优势&#xff0c;这些优势使其成为许多数据库管理系统中首选的索引结构之一。以下是 B 树作为索引的一些主要优势&#xff1a; 高效的查询性能&#xff1a;B 树是一种平衡树结构&#xff0c;具有良好的平衡性和高度平衡的性质&#xff0c;这使得在 B 树上进行…

JaveSE—IO流详解:对象输入输出流(序列化及反序列化)

一. 基础理论知识 &#x1f4cc;怎么理解对象输入输出流 &#xff1f; ○ 把java中的对象输出到文件中&#xff0c;从文件中把对象输入到程序中. &#x1f4cc;为什么要这样做(目的) &#xff1f; 当我们创建一个对象时, 如new Student( "小张",20 ); 数据存储在…

[AIGC] MySQL存储引擎详解

MySQL 是一种颇受欢迎的开源关系型数据库系统&#xff0c;它的强大功能、灵活性和开放性赢得了用户们的广泛赞誉。在 MySQL 中&#xff0c;有一项特别重要的技术就是存储引擎。在本文中&#xff0c;我们将详细介绍什么是存储引擎&#xff0c;以及MySQL中常见的一些存储引擎。 文…

对AOP的理解

目录 一、为何需要AOP&#xff1f;1、从实际需求出发2、现有的技术能解决吗&#xff1f;3、AOP可以解决 二、如何实现AOP&#xff1f;1、基本使用2、更推荐的做法2.1 “基本使用”存在的隐患2.2 最佳实践2.2.1 参考Transactional&#xff08;通过AOP实现事务管理&#xff09;2.…

C++零基础入门学习视频课程

教程介绍 本专题主要讲解C基础入门学习&#xff0c;所以不会涉及很深入的语法和机制。但会让你整体多面的了解和学习C的核心内容&#xff0c;快速学习使用C&#xff0c;我们的目标是先宏观整体把握&#xff0c;在深入各个击破&#xff01; 学习地址 链接&#xff1a;https:/…

力扣Lc22--- 459. 重复的子字符串(java版)-2024年3月27日

1.题目描述 2.知识点 &#xff08;1&#xff09; 在Java中&#xff0c;.repeat(i) 是一个字符串方法&#xff0c;用于将原始字符串重复 i 次。 例如&#xff0c;对于字符串 “ab”&#xff0c;使用 .repeat(3) 将会返回 “ababab”。 public class RepeatExample {public s…

速看!MC-CCPIT第二十二届中国国际冶金工业展览会

METALLURGY CHINA 2024 MC-CCPIT第二十二届中国国际冶金工业展览会 ——冶金装备品牌展示区 主办单位&#xff1a;中国钢铁工业协会 中国国际贸易促进委员会冶金行业分会 承办单位&#xff1a;冶金工业国际交流合作中心 地 点&#xff1a;上海新国际博览中心 时 间&am…

高阶SQL语句(二)

一 子查询 也被称作内查询或者嵌套查询&#xff0c;是指在一个查询语句里面还嵌套着另一个查询语 句。子查询语句 是先于主查询语句被执行的&#xff0c;其结果作为外层的条件返回给主查询进行下一 步的查询过滤。 ①子语句可以与主语句所查询的表相同&#xff0c;也可以是不…

2024年目前阿里云服务器一个月收费价格表多少钱?

阿里云服务器一个月多少钱&#xff1f;最便宜5元1个月。阿里云轻量应用服务器2核2G3M配置61元一年&#xff0c;折合5元一个月&#xff0c;2核4G服务器30元3个月&#xff0c;2核2G3M带宽服务器99元12个月&#xff0c;轻量应用服务器2核4G4M带宽165元12个月&#xff0c;4核16G服务…

一文彻底搞懂MySQL中事务的五种分类

文章目录 1. 什么是事务2. 事务的分类3. 事务的详解 1. 什么是事务 事务是指作为单个逻辑工作单元执行的一系列操作&#xff0c;这些操作要么全部成功完成&#xff0c;要么全部失败回滚&#xff0c;从而保证数据库操作一致性和完整性的重要机制&#xff0c;它确保了数据库在并…

程序员提效 x10 的必备开源“神器”

工欲善其事&#xff0c;必先利其器。我们每个人的电脑中都会有一些爱不释手的工具软件。 转Linux 桌面2年了&#xff0c;期间尝试过各种各样“神奇”的开源工具&#xff0c;作为一个开源软件爱好者&#xff0c;这里给大家推荐几个这些年工作、学习、生活中常用、跨平台、免费的…

【MySQL】简述SQLの通用语法及4种基本语句介绍(DDL/DML/DQL/DCL)

前言 大家好吖&#xff0c;欢迎来到 YY 滴MySQL系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C Linux的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的…

CenOS安装yum(超详细)

专栏文章索引&#xff1a;Linux 目录 1.检查yum源是否安装 2.卸载yum源 3.去网站下载yum源&#xff0c;至少需要下载3个 4.安装&#xff08;不要出现其他后缀名为rpm的文件&#xff09; 1.检查yum源是否安装 rpm -qa|grep yum 2.卸载yum源 查看一下是否成功删除 3.去网站下…

esp32CAM环境搭建(arduino+MicroPython+thonny+固件)

arduino ide 开发工具 arduino版本&#xff1a;1.8.19 arduino ide 中文设置&#xff1a;​ file >> preferences >> ​ arduino IDE 获取 ESP32 开发环境&#xff1a;打开 Arduino IDE &#xff0c;找到 文件>首选项 ,将 ESP32 的配置链接填入附加开发板管理网…

【Linux】进程地址空间详解

前言 在我们学习C语言或者C时肯定都听过老师讲过地址的概念而且老师肯定还会讲栈区、堆区等区域的概念&#xff0c;那么这个地址是指的物理内存地址吗&#xff1f;这里这些区域又是如何划分的呢&#xff1f; 我们在使用C语言的malloc或者C的new函数开辟空间时&#xff0c;开辟…

基于 Linux 的更新版 MaxPatrol VM 可扫描 Windows

&#x1f47e; MaxPatrol VM 2.1 是俄罗斯唯一一款可以安装在 Linux 上并以审计和五重测试模式扫描 Windows 主机&#xff08;甚至是旧版本&#xff09;的漏洞管理产品。 让我们告诉你更新后的 MaxPatrol VM 还有哪些有用的功能&#xff1a; 1. 由于采用了新的数据存储模式&a…

【Canvas与艺术】模拟八一电影制片厂电影片头效果

【缘起】 八一厂每部电影前都有其专有开头&#xff0c;如&#xff1a;https://www.ixigua.com/6799821997258834440?logTag2eacce76401e13f9efe7 这个片头可以用canvas模拟下来。 【关键点】 线型放射状粒子系统的运作。 立体感五角星的绘制。 【图例】 【代码】 <!D…