hdu5183Negative and Positive (NP))——手写Hash&&模板
题意:问是否存在一段区间其加减交错和为K。
显然,我们可以用set保存前缀和,然后枚举一个端点查找。具体的

若在st1中查找 $t$,为 $sum-t=-k$,在st2中则是 $sum-t=k$。
注意这样作差的话,没有考虑到 $a_1$ 开始的,只要在st2中插入一个0即可。
然而,这题卡set,必须手写hashmap(说实话,之前不太相信会有卡set的题!)
后来发现unordered_set也能过(刚好过)

分别是unordered_set、set、手写hashmap
#include<bits/stdc++.h>
using namespace std; typedef long long ll;
const int maxn = + ;
int n, k;
//set<ll>st1, st2; const unsigned long long SMod = ;
struct Hashmap
{
struct Node
{
long long num;
int next;
};
Node nodes[*maxn];
int cnt_node; //节点个数
int head[SMod+]; //链表的头 void init()
{
memset(head, - , sizeof(head));
cnt_node = ;
} void insert(long long num)
{
int pos = num % SMod; //在链表头中的位置
nodes[cnt_node].next = head[pos];
nodes[cnt_node].num = num;
head[pos] = cnt_node;
cnt_node++;
} long long find(long long num) //找到的话返回节点编号,没找到返回-1
{
int pos = num % SMod;
for(int i = head[pos]; i != -; i = nodes[i].next)
{
if(nodes[i].num == num) return i;
}
return -;
}
}st1, st2; int main()
{
int T, kase=;
scanf("%d", &T);
while(T--)
{
scanf("%d%d", &n, &k);
ll sum = ;
bool flag = false;
st1.init(); st2.init(); st2.insert();
for(int i = ;i <= n;i++)
{
int tmp;
scanf("%d", &tmp);
if(i&){ sum += tmp; st1.insert(sum);}
else { sum -= tmp; st2.insert(sum);} //printf("sum:%d\n", sum);
if(st1.find(sum+k) != -|| st2.find(sum-k) != -) flag = true;
} printf("Case #%d: ", ++kase);
if(flag) printf("Yes.\n");
else printf("No.\n");
}
}
hdu5183Negative and Positive (NP))——手写Hash&&模板的更多相关文章
- HDU 5183 Negative and Positive (NP) (手写哈希)
题目链接:HDU 5183 Problem Description When given an array \((a_0,a_1,a_2,⋯a_{n−1})\) and an integer \(K\ ...
- HDU 5183 Negative and Positive (NP) ——(后缀和+手写hash表)
根据奇偶开两个hash表来记录后缀和.注意set会被卡,要手写hash表. 具体见代码: #include <stdio.h> #include <algorithm> #in ...
- dfs手写栈模板
在竞赛中如果系统栈很小的话,过深的递归会让栈溢出,这个时候我们就要自己手写栈,将递归转化成手工栈. 方法其实也很简单. 基本思路上,我们就是用栈不断的pop,push.但是何时push,何时pop呢? ...
- 2019牛客多校第五场generator2——BSGS&&手写Hash
题目 几乎原题 BZOJ3122题解 分析 先推一波公式,然后除去特殊情况分类讨论,剩下就是形如 $a^i \equiv b(mod \ p)$ 的方程,可以使用BSGS算法. 在标准的BSGS中,内 ...
- hdu-5183-Negative and Positive (NP)(hash模板)
题目链接 #include <iostream> #include <cstdio> #include <cstring> #include <algorit ...
- Vue2.0 + ElementUI 手写权限管理系统后台模板(一)——简述
挤一下: 一开始以为没有多少人用就没建群,但是加我的人太多了,好多问题都是重复的,所以建个群大家互相沟通交流方便点,但是建的有点晚,错过了好多人所以群里人有点少,QQ群: 157216616 小提示 ...
- Tensorflow搭建卷积神经网络识别手写英语字母
更新记录: 2018年2月5日 初始文章版本 近几天需要进行英语手写体识别,查阅了很多资料,但是大多数资料都是针对MNIST数据集的,并且主要识别手写数字.为了满足实际的英文手写识别需求,需要从训练集 ...
- 第三节,TensorFlow 使用CNN实现手写数字识别(卷积函数tf.nn.convd介绍)
上一节,我们已经讲解了使用全连接网络实现手写数字识别,其正确率大概能达到98%,这一节我们使用卷积神经网络来实现手写数字识别, 其准确率可以超过99%,程序主要包括以下几块内容 [1]: 导入数据,即 ...
- C基础 带你手写 redis adlist 双向链表
引言 - 导航栏目 有些朋友可能对 redis 充满着数不尽的求知欲, 也许是 redis 属于工作, 交流(面试)的大头戏, 不得不 ... 而自己当下对于 redis 只是停留在会用层面, 细节层 ...
随机推荐
- Openssl 加解密文件
使用openssl 的命令行进行文件的加密与解密过程,主要有两种方式: openssl 指定加密/解密算法加密 openssl 指定公钥/私钥文件加密 openssl 指定加密/解密算法加密 To E ...
- 【Python | opencv+PIL】常见操作(创建、添加帧、绘图、读取等)的效率对比及其优化
一.背景 本人准备用python做图像和视频编辑的操作,却发现opencv和PIL的效率并不是很理想,并且同样的需求有多种不同的写法并有着不同的效率.见全网并无较完整的效率对比文档,遂决定自己丰衣足食 ...
- 【闭包】Pants On Fire
Pants On Fire 题目描述 Donald and Mike are the leaders of the free world and haven’t yet (after half a y ...
- vi 使用系统剪贴板(clipboard)
ref : https://www.jianshu.com/p/771b95e34293 http://www.bubuko.com/infodetail-469867.html 在vi中,如果编译时 ...
- VS2013+WDK8.1 驱动开发环境配置
Windows Driver Kit 是一种完全集成的驱动程序开发工具包,它包含 WinDDK 用于测试 Windows 驱动器的可靠性和稳定性,本次实验使用的是 WDK8.1 驱动开发工具包,该工具 ...
- rman备份跳过read only数据文件,减少备份总量,加快备份时间
客户需求,RMAN备份时间过长,想缩短备份时间,优化备份. 客户基于表空间进行历史数据归档的方式,将历史的表空间进行read only,想让RMAN跳过只读表空间,减少RMAN备份的数据总量,从而缩短 ...
- (十七)Activitivi5之组任务分配
一.需求分析 我们在实际业务开发过程中,某一个审批任务节点可以分配一个角色(或者叫做组),然后属于这个角色的任何一个用户都可以去完成这个任务节点的审批 二.案例 2.1 方式一:直接流程图配置中写死 ...
- (二) JPA基础
一.什么是JAP JPA(Java Persistence API)是SUN官方推出的Java持久化规范,它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据.它的出现主要是 ...
- 为什么领域模型对于架构师如此重要? https://blog.csdn.net/qq_40741855/article/details/84835212
为什么领域模型对于架构师如此重要? https://blog.csdn.net/qq_40741855/article/details/84835212 2018年12月05日 14:30:19 绝圣 ...
- elementUI动态数据表格(带分页)
index.vue <template> <div> <el-table ref="multipleTable" :data="tableD ...