【集训Day2 哈希表】【NHOI2015】【Luogu P2421】差
LuoguP2421
原题来自NHOI2015
【解题思路】
本题的解题方法有三种,一种为枚举减数,二分查找被减数。第二种为利用数据单调性用尺取法进行查找,第三种为运用哈希表以快速查找数据。
【解题反思】
- 一题可能有多种解法,尝试选择自己最擅长的。
【参考程序】
#include<iostream>
#include<cstdio>
using namespace std;
int n,a[100001],i,j,ans,s,c;
int main()
{
freopen("dec.in","r",stdin);
freopen("dec.out","w",stdout);
cin>>n>>c;
for (int k=1;k<=n;k++) cin>>a[k];
i=1;
j=i+1;a[i-1]=-1;
while (i<=n)
{
if (a[j]-a[i]<c)//如果差值小了,那么增大被减数
{
j++;
}
else if (a[j]-a[i]>c||j>n)//如果差值大了,那么增大减数
{
i++;
if (a[i]==a[i-1]) ans+=s;//如果与前一个统计的相同,意味着无需再次统计
else s=0;
}
else if (a[j]-a[i]==c)//如果相等,那么统计并且增大被减数
{
j++;
ans++;
s++;
}
}
cout<<ans;
return 0;
}
以上是尺取法
#include<iostream>
#include<cstdio>
using namespace std;
int a[100001];
int n,c,ans,b,tmp;
int main()
{
freopen("dec.in","r",stdin);
freopen("dec.out","w",stdout);
cin>>n>>c;
int j=1;
for (int i=1;i<=n;i++) cin>>a[i];
for (int i=1;i<=n;i++)
{
int l=0,r=n+1,mid;
while (l<r-1)
{
mid=(l+r)/2;
if (a[mid]-a[i]>=c) r=mid;
if (a[mid]-a[i]<c) l=mid;
}//查找被减数在数据中最开始的位置
tmp=r;
l=0;r=n+1;
while (l<r-1)
{
mid=(l+r)/2;
if (a[mid]-a[i]<=c) l=mid;
if (a[mid]-a[i]>c) r=mid;
}//查找被减数在数据中最后出现的位置
ans+=l-tmp+1;//统计
}
cout<<ans;
return 0;
}
上为二分查找法
#include<iostream>
#include<cstdio>
using namespace std;
const int mod=1000007;
int hash[mod+5],count[mod+5],n,c,ans,a[100001];
void add(int s)//将该数压入哈希表
{
int cod=s%mod;
while (hash[cod]!=s&&hash[cod]!=0)//线性探测法解决哈希表冲突
{
cod++;
cod%=mod;
}
hash[cod]=s;
count[cod]++;
}
int find(int s)//在哈希表中寻找该数值
{
int cod=s%mod;
while (hash[cod]!=s&&hash[cod]!=0)//线性探测
{
cod++;
cod%=mod;
}
if (hash[cod]==s) return cod;
else return 0;
}
int main()
{
freopen("dec.in","r",stdin);
freopen("dec.out","w",stdout);
cin>>n>>c;
for (int i=1;i<=n;i++)
{
cin>>a[i];
add(a[i]);
}
for (int i=1;i<=n;i++)
{
int p=find(a[i]+c);
if (p!=0) ans+=count[p];
}
cout<<ans;
return 0;
}
上为哈希表法
【集训Day2 哈希表】【NHOI2015】【Luogu P2421】差的更多相关文章
- [PHP内核探索]PHP中的哈希表
在PHP内核中,其中一个很重要的数据结构就是HashTable.我们常用的数组,在内核中就是用HashTable来实现.那么,PHP的HashTable是怎么实现的呢?最近在看HashTable的数据 ...
- Java 哈希表运用-LeetCode 1 Two Sum
Given an array of integers, find two numbers such that they add up to a specific target number. The ...
- ELF Format 笔记(十五)—— 符号哈希表
ilocker:关注 Android 安全(新手) QQ: 2597294287 符号哈希表用于支援符号表的访问,能够提高符号搜索速度. 下表用于解释该哈希表的组织,但该格式并不属于 ELF 规范. ...
- Java基础知识笔记(一:修饰词、向量、哈希表)
一.Java语言的特点(养成经常查看Java在线帮助文档的习惯) (1)简单性:Java语言是在C和C++计算机语言的基础上进行简化和改进的一种新型计算机语言.它去掉了C和C++最难正确应用的指针和最 ...
- 什么叫哈希表(Hash Table)
散列表(也叫哈希表),是根据关键码值直接进行访问的数据结构,也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.这个映射函数叫做散列函数,存放记录的数组叫做散列表. - 数据结构 ...
- 【哈希表】CodeVs1230元素查找
一.写在前面 哈希表(Hash Table),又称散列表,是一种可以快速处理插入和查询操作的数据结构.哈希表体现着函数映射的思想,它将数据与其存储位置通过某种函数联系起来,其在查询时的高效性也体现在这 ...
- openssl lhash 数据结构哈希表
哈希表是一种数据结构,通过在记录的存储位置和它的关键字之间建立确定的对应关系,来快速查询表中的数据: openssl lhash.h 为我们提供了哈希表OPENSSL_LHASH 的相关接口,我们可以 ...
- Berkeley DB的数据存储结构——哈希表(Hash Table)、B树(BTree)、队列(Queue)、记录号(Recno)
Berkeley DB的数据存储结构 BDB支持四种数据存储结构及相应算法,官方称为访问方法(Access Method),分别是哈希表(Hash Table).B树(BTree).队列(Queue) ...
- python数据结构与算法——哈希表
哈希表 学习笔记 参考翻译自:<复杂性思考> 及对应的online版本:http://greenteapress.com/complexity/html/thinkcomplexity00 ...
随机推荐
- django-Views之装饰器(四)
1.选择支持的请求方式 from django.views.decorators.http import require_http_methods from django.shortcuts impo ...
- ES6---变量解构赋值
1.数组的解构赋值 1.1 基本用法 解构赋值:在ES6中 ,按照一定模式从数组和对象中提取值,然后对变量进行赋值,这被称为解构赋值.本质:这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量 ...
- 虚拟机linux centos7 查找ip不到的设置
1.centos7 系统后查找ip信息,不用ifconfig -a 命令,开始使用ip Addr命令 输入ip Addr 命令后,并没有看到实际的ip地址,记住上述图片中红色标记的ens32 这个就是 ...
- 什么是浮点型?什么是单精度浮点数(float)以及双精度浮点数(double)?
前言 作为一名java学习者,怎能不懂这些java基础中的基础呢?本文就带各位温顾温顾java浮点型.单精度浮点数.双精度浮点数. 浮点型 首先明确java中浮点型数据类型主要有:单精度float.双 ...
- 通过 Django Pagination 实现简单分页
作者:HelloGitHub-追梦人物 文中所涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 当博客上发布的文章越来越多时,通常需要进行分页显示,以免所有的文章都堆积在一个页面, ...
- Web信息搜集
文件是转载原文https://www.freebuf.com/articles/web/204883.html 如有侵权 请联系 对一个网站挖掘的深浅来说,信息收集是非常的重要的,这篇文章主要分享本 ...
- CSPS模拟 56
前十基本都A题了,只有$Dybala$.$Naito$和弱比$yxs$没有A题 $T1 Merchant$ 明明学过$nth element$但是由于不懂原理导致我用了个鬼畜的${U队}$来维护前$K ...
- NOIP模拟 22
剧情回放:xuefeng:考场上你们只打暴力不打正解,我不满意! skyh:考场怒切T2以表明自己拥护xuefeng的决心 BoboTeacher:这场考试就没想让你们上100 神犇skyh:(笑而不 ...
- 【建站03】WordPress网站如何去除RSS功能
哈喽,大家好,我是帝哥,最近有小伙伴问我,如何去掉WordPress上的RSS功能,这个功能呢,说实话,我们很少会用到. 但是如果有点强迫症的话看着会很不舒服,所以,今天和大家分享一下如何去掉Word ...
- Apache httpd 2.4.27开启GZIP压缩功能
转载自素文宅博客:https://blog.yoodb.com/yoodb/article/detail/1373 HTTP协议上的GZIP编码是一种用来改进WEB应用程序性能的文件压缩算法,现在的应 ...