【算法笔记】二维的哈希与迭代转换;Runtime Error 的解决思路

news2024/12/24 0:31:35

https://vjudge.net/problem/UVA-11019

如何对一个二维数组进行哈希

对于一个一维数组A(1*M),哈希的方式是:
s e e d M − 1 ∗ A [ 0 ] + s e e d M − 2 ∗ A [ 1 ] + s e e d M − 3 ∗ A [ 2 ] + . . . + s e e d 0 ∗ A [ M − 1 ] seed^{M-1}*A[0] + seed^{M-2}*A[1] + seed^{M-3}*A[2]+...+seed^{0}*A[M-1] seedM1A[0]+seedM2A[1]+seedM3A[2]+...+seed0A[M1]

对于二维数组A(N*M)
s e e d 2 N − 1 ∗ h a s h ( 0 ) + s e e d 2 N − 2 ∗ h a s h ( 1 ) + s e e d 2 N − 3 ∗ h a s h ( 2 ) + . . . + s e e d 2 0 ∗ h a s h ( N − 1 ) seed2^{N-1}*hash(0) + seed2^{ N-2}*hash(1) + seed2^{N-3}*hash(2)+...+seed2^{0}*hash(N-1) seed2N1hash(0)+seed2N2hash(1)+seed2N3hash(2)+...+seed20hash(N1)
其中,hash(i)是第i行的哈希值

seed 的取法

seed 不需要是质数,只要大于A中的最大值就可以。想象对0~9组成的数组进行哈希,seed取10即可
同理,seed2 也不需要是质数,只需要是大于所有一维的哈希值即可

二维哈希的迭代

假设要哈希的是一个N*M的二维数组,把各项的seed1,seed2指数列出来:

M-1 N-1M-2 N-1M-3 N-1…1 N-10 N-1
M-1 N-2M-2 N-2M-3 N-2…1 N-20 N-2
M-1 N-3M-2 N-3M-3 N-3…1 N-30 N-3
M-1 …1M-2 …1M-3 …1…1 …10 …1
M-1 0M-2 0M-3 0…1 00 0

横向

假如这个数组往右移:

del delM-1 N-1M-2 N-1M-3 N-1…1 N-10 N-1
del delM-1 N-2M-2 N-2M-3 N-2…1 N-20 N-2
del delM-1 N-3M-2 N-3M-3 N-3…1 N-30 N-3
del delM-1 …1M-2 …1M-3 …1…1 …10 …1
del delM-1 0M-2 0M-3 0…1 00 0

规律:

  1. 第0列删掉
  2. 1~M-1列 seed1 指数加一
  3. 新增第M列,第M列的值是
0 N-1
0 N-2
0 N-3
0 …1
0 0

如果预处理所有(N*1)的列,用上面的表算出他们的值,那么第3步就能解决了
巧合的是,第一步要删除的:

M-1 N-1
M-1 N-2
M-1 N-3
M-1 …1
M-1 0

刚好是上面预处理的值的 s e e d 1 M − 1 seed1^{M-1} seed1M1

纵向

往下移:

del deldel deldel deldel deldel del
M-1 N-1M-2 N-1M-3 N-1…1 N-10 N-1
M-1 N-2M-2 N-2M-3 N-2…1 N-20 N-2
M-1 N-3M-2 N-3M-3 N-3…1 N-30 N-3
M-1 …1M-2 …1M-3 …1…1 …10 …1
M-1 0M-2 0M-3 0…1 00 0

规律:

  1. 第0行删掉
  2. 1~N-1行 seed2 指数加一
  3. 新增第N列,第N列的值是

同上面横向移动的分析,我们需要预处理这样的一个值来完成 1 和 3 的操作

M-1 0M-2 0M-3 0…1 00 0

Runtime Error

在这里插入图片描述
心态真的会崩

RE 的原因一般是越界了,访问不存在的内存这样的,不过打出来所有访存的index,发现没有一个越界了

查了一下,也有可能是比方说数组开太大了,爆内存了,比如 int A[1e8],肯定会 RE(栈内存里,堆内存不会)

我是进行过一个预处理的操作,然后把所有的数值存起来的,仔细想想这个数据量也挺大的
一个点15个case。每个case如果小块是1*1,大块是1000*1000,就要存 2e6 个数据。15*2e6=3e7,这个放栈内存上肯定爆掉,我用的vector,放堆内存不知道,估计也很极限,所以就给改成了每次用到的时候现算

后来查了vector其实极限能开1e9这样,上面的改动其实用不着,而且还给整的 TLE 了,因为其实算了两次

最后回家路上走着走着才想起来,把小块放在左上角的那步,就是迭代的初始情况,我没有加判断,比方说小块的大小比大块的还大,那第一步的时候是会越界的
加了

        if(M==0 || N==0 || X==0 || Y==0){
            cout<<0<<endl;
            continue;
        }

        if(X>N || Y>M){
            cout<<0<<endl;
            continue;
        }

果然解决了

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

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

相关文章

继续绷紧油市神经,市场预计沙特10月继续自愿减产

KlipC报道&#xff1a;据了解&#xff0c;市场参与者大都认为沙特阿拉伯将会把自愿额外减产的措施延长至10月底&#xff0c;以寻求在经济低迷的背景下提振油价。 KlipC的合伙人Andi D表示&#xff1a;“今年5月起&#xff0c;沙特就自愿减产日均50万桶原油&#xff0c;今年6月初…

app加固怎么做?

app加固是一种保护应用程序免受攻击的技术&#xff0c;可以防止未经授权的访问、数据泄露和其他安全问题。下面是一些app加固的最佳实践&#xff1a; 1.加密和数据保护&#xff1a;对应用程序的数据进行加密和保护&#xff0c;以防止未经授权的访问和数据泄露。您可以使用AES、…

工具及方法 - 色彩分析仪

在手机或其他带有显示屏的产品开发中&#xff0c;需要对显示屏显示的颜色进行测量&#xff0c;就会用到色彩分析仪。 看到别人在使用的一款&#xff0c;就是CA-410 display color analyzer&#xff0c;柯尼卡美能达CA-410高精度色彩分析仪。(Konica Minolta) 产品页链接&#x…

【输入法】Knife4j打字时,莫名其妙删除文本

一直以为是ui的问题&#xff0c;想着升级下Knife4j&#xff0c;无意中发现切换输入法后&#xff0c;该问题不复现。 遂卸载QQ拼音输入法6.6

信息图片怎么做二维码?图片生码的操作方法

现在很多人会将自己的证件信息的图片生成二维码使用&#xff0c;那么图片转二维码的操作方法是什么样的呢&#xff1f;想要将图片生成二维码的方法非常简单&#xff0c;利用二维码生成器&#xff08;免费在线二维码生成器-二维码在线制作-音视频二维码在线生成工具-机智熊二维码…

降噪音频转录 Krisp: v1.40.7 Crack

主打人工智能降噪服务的初创公司「Krisp」近期宣布推出音频转录功能&#xff0c;能对电话和视频会议进行实时设备转录。该软件还整合的ChatGPT&#xff0c;以便快速总结内容&#xff0c;开放测试版于今天上线。 随着线上会议越来越频繁&#xff0c;会议转录已成为团队工作的重…

国标GB28181视频平台EasyGBS国标视频云平台级联到EasyCVR,上级平台无法播放通道视频的问题解决方案

EasyGBS国标视频云平台是基于国标GB28181协议的视频能力兼服务平台&#xff0c;可实现的视频能力包括将设备通过国标GB28181协议接入、流媒体转码、处理及分发、直播录像、语音对讲、云存储、告警、平台级联等功能。其中&#xff0c;平台级联功能是指平台与平台之间可以通过国标…

2023抖音小店体验分迎来重大更新,考核标准要变啦!

抖音小店体验分即将有重大变化&#xff01;4月13日&#xff0c;平台发布了一条意见征集&#xff0c;关于体验分修改的问题。 核心变化主要包括以下几点&#xff1a; 1、指标体系调整 1.1 商品体验&#xff1a;移除商品基础分指标&#xff1b;移除融合型指标【综合负向反馈率…

IDEA常用快捷键大全(最新)

一、 前言 IDEA 中提供了很多快捷键&#xff0c;点击File --> Settings --> keymap便可进入看到 IDEA 提供的快捷键。我们也可以搜索和自定义所有快捷键&#xff0c;下面给出的是 IDEA 中默认的快捷键&#xff1b; 默认idea用的是windows模式 二、常用快捷键 快捷键 …

Matlab怎么引入外部的latex包?Matlab怎么使用特殊字符?

Matlab怎么引入外部的latex包&#xff1f;Matlab怎么使用特殊字符&#xff1f; Matlab怎么使用特殊字符&#xff1f;一种是使用latex方式&#xff0c;Matlab支持基本的Latex字符【这里】&#xff0c;但一些字符需要依赖外部的包&#xff0c;例如“&#x1d53c;”&#xff0c;需…

在 Tubi,英文书面沟通是这样的

在之前的文章《有了英文&#xff0c;你将在这些场景中更自信》中&#xff0c;我们曾对 Tubi 使用英文听说读写方面的场景进行了汇总整理。尽管英文听与说曾是大家最关注的方面&#xff0c;但在今年七月和八月期间 Tubi 中国团队开展的一场名为“Writing for Results” 的工作坊…

如何从ChatGPT中获得最佳聊天对话效果

从了解ChatGPT工作原理开始&#xff0c;然后从互动中学习&#xff0c;这是一位AI研究员的建议。 人们利用ChatGPT来撰写文章、论文、生成文案和计算机代码&#xff0c;或者仅仅作为学习或研究工具。然而&#xff0c;大多数人不了解它的工作原理或它能做什么&#xff0c;所以他…

算法设计 || 第11题:多段图的最短路径问题动态规划

利用动态规划来编程求解多段图最短路径问题。 对如下图所示的一个5段图&#xff0c;图上的数字代表该段路径的成本。 写出求最短路径的计算过程&#xff0c;给出最短路径和距离。

BDTC 2023中国大数据技术大会「金融大数据风险治理论坛」成功召开

2023年8月26日&#xff0c;由中国计算机学会主办的第十七届中国大数据技术大会金融大数据风险治理论坛在北京中科闻歌科技股份有限公司成功召开。本次论坛聚焦金融大数据领域&#xff0c;邀请了多位金融大数据领域的专家分享前沿技术与学术成果&#xff0c;共同探讨金融大数据风…

【Redis】redis入门+java操作redis

目录 一、Redis入门 1.1 Redis简介 1.2 Redis下载与安装 1.2.1 下载 1.2.2 linux安装 1.2.3 windows安装 1.3 Redis服务启动与停止 1.3.1 linux启动、停止Redis服务 1.3.2 windows启动、停止Redis服务 1.4 修改Redis启动密码 1.4.1 Linux修改设置 1.4.2 windows设…

测试用例设计及方法

目录 1. 测试用例 1.1 测试用例的基本要素 1.2 测试用例的设计方法 1.2.1 基于需求设计测试用例 2. 具体设计测试用例方法 2.1 等价类 2.2 边界值 2.3 判定表法 2.4 正交表 2.5 场景法设计测试用例 3. 针对一个需求如何设计测试用例 1. 测试用例 1.1 测试用例的基本…

模拟实现list

目录 list的实现结构节点的实现迭代器的实现第一个模板参数T第二个模板参数Ref第三个模板参数Ptr 实现list中的接口函数插入和删除赋值重载和拷贝构造析构函数 总结 list的实现结构 STL库中的list的结构是双向循环链表&#xff0c;所以我们这里也实现一个双向循环链表 我们这…

Google登录SDK

一、接入的准备工作 官方文档链接地址&#xff1a;开始使用一键登录和注册 按照步骤进行接入即可 二、项目参考&#xff08;Unity项目&#xff09; 注意&#xff1a;代码版本如果不适用新的Google API 请自行参考最新版本接口 SDKGoogleSignInActivity 主要用于登录的代码。Un…

el-table中点击跳转到详情页的两种方法

跳转的两种写法: 1.使用keep-alive使组件缓存,防止刷新时参数丢失 keep-alive 组件用于缓存和保持组件的状态&#xff0c;而不是路由参数。它可以在组件切换时保留组件的状态&#xff0c;从而避免重新渲染和加载数据。 keep-alive 主要用于提高页面性能和用户体验&#xff0c;而…