【集训Day2 哈希表】【NHOI2015】【Luogu P2421】差

NHOI2017初中组解题报告 2017年南海区青少年信息学奥林匹克竞赛初中组解题报告 阅读详情

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;
}

上为哈希表法

NHOI2015题面 这份题目是南海区2015年区赛,但是后面的题目难度接近于省赛,值得一练。 立即下载

相关推荐

Apache-Plc4x-Modbus-Tcp学习记录(一)

Apache-Plc4x-Modbus-Tcp学习记录(一)

weixin_45325423的博客 6988

STL专辑之STL之映射

map翻译为映射,是STL中的常用容器。其实,数组就是一种映射,比如:int a[100];就是定义了一个int到int的映射。而a[5]=25;就是把5映射到25。数组总是将int类型映射到其它基本类型(称为数组的基类型),这同时也带来了一个问题,有时候我们希望把string映射成一个int,数组就不方便了。这时就可以使用map,map可以将任何基本类型(包括STL容器)映射到任何基本类型(包括STL容器)。二、映射的用途1)需要建立字符(串)与整数之间的映射。

xuchenxuan01的博客 1043

python入门:Anaconda和Jupyter notebook的安装与使用

一、安装和使用Anaconda 1、anaconda是什么? Anaconda在英文中是“巨蟒”的意思,与python的意思相近,它是python的包管理器和环境管理器。 2、为什么需要安装anaconda? 原因有以下几点: 附带一大批常用的数据科学包,方便立即开始处理数据 管理包 anaconda是在conda(一个包管理器和环境管理器)上发展来的;而conda可以很方便地对第三方的包进行安装、卸载和更新。 管理环境 conda可以为不同的项目建立不同的运行环境,避免不同的项目或包版本

PY洋洋 1万+

【集训Day1 测试】【USACO】照相

照相(fairphoto) 【题目描述】 有N 头奶牛站在一条数轴上,第 i 头奶牛的位置是 Pi,奶牛不会重叠站在同一个位置, 第i 头奶牛的颜色是 Ci,其中 Ci 要么是字符‘G’要么是字符‘H’。现在农夫 FJ 想给一段连续的奶牛照一张相,前提是满足一下三个条件之一: 1、这连续一段奶牛的颜色全部是‘G’。 2、这连续一段奶牛的颜色全部是‘H’。3、这连续一段奶牛,颜色是‘H’的奶

WSR的安全屋 1230

测试丢包_电信IPRAN承载LTE业务丢包故障处理案例

银川 景旭阳电信IPRAN承载LTE业务丢包故障处理案例一.故障现象某地市IPRAN网络承载LTE基站业务,客户反馈近期丢包严重,基站侧ping侧核心网EPC丢包达到10%左右;且基站数量在10个左右,并分布在同一地区,需要IPRAN网络协助排查;随后查看了IPRAN网络;发现这些业务所在基站的PW-BFD历史告警存在频繁的UP/DOWN告警;综上信息展开故障处理,初步判断由于BFD频繁...

weixin_29740921的博客 1911

手把手教你用Wireshark抓包分析BLE广播包:从PDU结构到AD Type实战解析

本文详细介绍了如何使用Wireshark工具抓取并分析BLE广播包,从PDU结构到AD Type的实战解析。通过硬件设备选择、软件配置、协议栈解析及高级故障排查,帮助开发者深入理解蓝牙低功耗通信机制,提升物联网设备调试效率。

weixin_30482383的博客 417

选牛题解

选牛 题目描述 在一条坐标轴上,有n头奶牛,第i头奶牛的位置是Xi。FJ现在要选出三头奶牛去比赛,不妨假设选择了奶牛a,b,c。那么必须要满足: 1:Xa<Xb<Xc。 2:Xb-Xa≤Xc - Xb≤2×(Xb-Xa)。 你的任务是计算,FJ总共有多少种不同的选择? 输入输出格式 输入格式: 第一行,一个整数N。(3≤N≤1000)。 接下来有N行,第i行是整数Xi。 输出格式: 一行,一个整数。 输入输出样例 输入样例: 5 3 1 10 7 4 输出样例: 4 思路: 二分查找 #include&lt

qq_57360246的博客 780

半导体物理基础:载流子输运理论_(4).载流子浓度与费米能级

费米能级(Fermi Level)是描述半导体中电子和空穴能量分布的基准能级。在绝对零度下,费米能级以下的所有能级都被电子占据,费米能级以上的所有能级都是空的。随着温度的升高,电子会获得足够的能量跃迁到费米能级以上的能级,形成导带中的自由电子和价带中的空穴。费米能级在半导体中的位置取决于掺杂浓度和温度。对于本征半导体,费米能级位于禁带的中心;对于掺杂半导体,费米能级会偏移,具体位置取决于掺杂类型和浓度。载流子浓度(Carrier Concentration)是指半导体中自由电子和空穴的数量密度。

2401_87715305的博客 831

NHOI2015 初中组 T4

题目描述 给一个字符串 TTT,问在字符串 TTT 中可以包含最多多少个不重叠的字符串 SSS。 字符串中的每个字符为小写或者大写字母。 输入格式 第一行输入一个字符串 SSS。 第二行输入一个字符串 TTT。 输出格式 输出一行,包括一个整数表示答案。 输入样例: Aba Abababa 输出样例: 1 数据范围 1≤∣T∣≤106,1≤∣S∣≤105。1\leq|T|\leq10^6, 1\leq|S|\leq10^5。1≤∣T∣≤106,1≤∣S∣≤105。 解题思路 这道题考的是贪心 贪心策略

qq_57217599的博客 873

Agile Modbus使用和学习笔记

i < len;这里仅仅需要提供获取函数即可,离散输入是只读类型i++) {return 0;只读类型寄存器i++) {return 0;i < len;

Car12 167

华为非AI方向0603笔试真题-爆破小游戏(详细思路+多语言题解)

华为非AI方向0603笔试第二题【爆破小游戏】,提供详细思路讲解以及代码实现。

qq_45776114的博客 358

2015NHOI小甲 第三题 排队

【代码】2015NHOI小甲 第三题 排队。

Ldxx603的博客 718

SPD-Conv+YOLOv8:空间深度转换卷积赋能小目标检测,从原理到实战的科研级优化指南

从理解SPD-Conv“空间到深度+逐步卷积”的核心设计,到亲手将其嵌入YOLOv8并验证在小目标场景的表现,再到基于此探索属于自己的科研与工程方向——这个过程能让你深刻理解“小目标特征保留”在检测任务中的核心价值。现在就开始行动,相信你会在小目标检测的“细节捕捉”之路上,走出一条属于自己的技术路径。实验通常会证明:嵌入SPD-Conv后,YOLOv8在小目标AP上提升5-8个百分点,mAP50-95提升3-5个百分点,而推理速度仅下降5%以内,充分体现了其“保细节+提精度”的优势。

m0_64661770的博客 161

排队的奶牛

Description 农夫约翰的N只奶牛排成了一条直线,每只奶牛都有一个特定的标识序号,从左到右第i只奶牛的编号是Bi。 约翰认为他的奶牛队列中存在某段连续区间都是相同序号的,那他的队列就非常的美观。为了创造这样的一个连续区间,约翰决定将某个特定的序号的奶牛全部剔除队列。 问题描述: 请帮助约翰计算出通过选择除去某个特定序号的全部奶牛后...

293

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

AcWing 1170 排队布局

题目描述: 当排队等候喂食时,奶牛喜欢和它们的朋友站得靠近些。 农夫约翰有N头奶牛,编号从1到N,沿一条直线站着等候喂食。 奶牛排在队伍中的顺序和它们的编号是相同的。 因为奶牛相当苗条,所以可能有两头或者更多奶牛站在同一位置上。 如果我们想象奶牛是站在一条数轴上的话,允许有两头或更多奶牛拥有相同的横坐标。 一些奶牛相互间存有好感,它们希望两者之间的距离不超过一个给定的数L。 另一方面,一些奶牛相互间非常反感,它们希望两者间的距离不小于一个给定的数D。 给出ML条关于两头奶牛...

昂昂累世士的博客 403

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【集训Day1 测试】奇怪数

奇怪数(odometer) 【题目描述】 一个正整数Z是奇怪数,当且仅当满足的条件是:Z的所有数字中,只有一个数字不同于其他数字。例如:33323、110 都是奇怪数,而 9779、5555 都不是奇怪数。给出两个正整数 X 和 Y,满足 100 <= X <= Y <= 10^16,请问区间[X,Y]内有多少个奇怪数? 【输入格式】odometer.in 一行,两个整数,X 和 Y。 【

WSR的安全屋 1132

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

NHOI2016简要分析

话说这次考崩了……本来很容易就能够考到第二的……但是第一题没有用long long然后就只剩15分了…… 另外最后一题更加神奇地没有搞到分数……本来我推出了30%数据的一个暴力递推式,但是没有搞对……不过考完之后5分多钟就知道怎么回事了。如果中途车不出问题就可以做出来了吧…… 好吧,话不多说,先上分析: 【T1:购书】 应该来说相当容易……但是我没有发现数据规模的问题。其实注意用一下64

算法的设计与应用研究 1843

选牛(二分查找)

#227. 选牛 题目描述 在一条坐标轴上,有n头奶牛,第i头奶牛的位置是Xi。FJ现在要选出三头奶牛去比赛,不妨假设选择了奶牛a,b,c。那么必须要满足: 1:Xa<Xb<Xc。 2:Xb-Xa≤Xc - Xb≤2×(Xb-Xa)。 你的任务是计算,FJ总共有多少种不同的选择? 输入输出格式 输入格式: 第一行,一个整数N。(3≤N≤1000)。 接下来有N行,第i行是整数Xi...

weixin_33859504的博客 331

NHOI2016的解题报告

NHOI2016解题报告 解题反思:这次比赛考得非常不好,第三题爆搜打错了,第五题没有想到用斜率来做,本来可以很高分的,下次继续努力。 南海实验中学 105班 区庆亮 第1题 购书(gs) 【题意分析】 有某人要买n本书。现在有促销活动,每买三本中可以去掉价格最小的一本再计算价钱。问:最合算的价格是多少? 【试题难度】 ★☆☆☆☆ 【解题思路】 贪心: 因...

weixin_33869377的博客 606

EKF算法在机器人定位中的原理与实践

扩展卡尔曼滤波(EKF)是处理非线性系统状态估计的重要算法,通过预测-更新机制有效融合多源传感器数据。其核心在于利用雅可比矩阵对非线性系统进行局部线性化,从而在机器人定位中实现厘米级精度。EKF通过处理传感器噪声、补偿运动模型误差,显著提升定位系统的鲁棒性,广泛应用于工业AGV、四足机器人等场景。在ROS中,robot_pose_ekf包提供了便捷的实现方式,通过合理配置过程噪声和观测噪声参数,可以优化系统性能。多传感器融合(如里程计、IMU、UWB)和动态环境适应性调参是工程实践中的关键挑战。

weixin_33912453的博客 428

站在自己该站的位置上

 作者:陬人  在星期六的一个阳光明媚的上午,我的朋友――那个骄傲的父亲勃比*来维斯带着他的两个小儿子去高尔夫球场打球。  他走到球场售票处问那里面的工作人员:“请问门票是多少钱?”  里面的年轻人回答他:“所有满6周岁的人进入球场都需要交3美元,先生。我们这个球场让6岁以下的儿童免费进入,请问你的两个孩子多大了?”  勃比回答道:“我们家未来的律师3岁了,我们家未来的医生7岁了,所以我想我应该付

xiedurensheng的专栏 749

NHOI2015C 树

按照某老师说的保密要求,题目不放上来,要原题的请在评论区附上证明自己是南海区学生的证明 那这题作为填坑第一弹是因为突然想起那时候眼睁睁看着wyl写了好几个优化版本而我连题目都看不懂,虽然现在看这题目很简单(笑cry)。 说一下做法。自己的做法是在线做法(在线:读一组处理一组,相对应的是离线,全部读入后再处理)。每读入一条边,这条边连接的俩结点有5种情况: 同根,两点在树上 同根,两点在有环图上 ...

weixin_30856965的博客 236

洛谷 USACO P2207 Photo

P2207 Photo 题目描述 Framer Jhon 打算给他的N头奶牛照相,( 2 <= N <= 1 000 000 000) 。 他们排成一条线,并且依次取1~N作为编号。 每一张照片可以拍摄到这列奶牛中一个连续的区间中的奶牛。 对于每一头奶牛,FJ都想要让Ta至少出现在一张照片里。 不幸的是,有K对关系不好的奶牛( 1 <= K &l...

weixin_30258901的博客 369

(简单) 状态压缩dp HOJ 2421 Hie with the Pie

Hie with the PieMy Tags  (Edit)Source : East Central North America 2006Time limit : 1 secMemory limit : 64 MSubmitted : 104, Accepted : 65The Pizazz Pizzeria prides itself in delivering pizzas to its

We Can 642
上一篇: 【集训Day1 测试】选择课题
下一篇: 【集训Day2】字符串
苟岂
博客等级 码龄10年 20粉丝 44原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值