题意:问是否存在一段区间其加减交错和为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&&模板的更多相关文章

  1. 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\ ...

  2. HDU 5183 Negative and Positive (NP) ——(后缀和+手写hash表)

    根据奇偶开两个hash表来记录后缀和.注意set会被卡,要手写hash表. 具体见代码: #include <stdio.h> #include <algorithm> #in ...

  3. dfs手写栈模板

    在竞赛中如果系统栈很小的话,过深的递归会让栈溢出,这个时候我们就要自己手写栈,将递归转化成手工栈. 方法其实也很简单. 基本思路上,我们就是用栈不断的pop,push.但是何时push,何时pop呢? ...

  4. 2019牛客多校第五场generator2——BSGS&&手写Hash

    题目 几乎原题 BZOJ3122题解 分析 先推一波公式,然后除去特殊情况分类讨论,剩下就是形如 $a^i \equiv b(mod \ p)$ 的方程,可以使用BSGS算法. 在标准的BSGS中,内 ...

  5. hdu-5183-Negative and Positive (NP)(hash模板)

    题目链接 #include <iostream> #include <cstdio> #include <cstring> #include <algorit ...

  6. Vue2.0 + ElementUI 手写权限管理系统后台模板(一)——简述

    挤一下: 一开始以为没有多少人用就没建群,但是加我的人太多了,好多问题都是重复的,所以建个群大家互相沟通交流方便点,但是建的有点晚,错过了好多人所以群里人有点少,QQ群: 157216616 小提示 ...

  7. Tensorflow搭建卷积神经网络识别手写英语字母

    更新记录: 2018年2月5日 初始文章版本 近几天需要进行英语手写体识别,查阅了很多资料,但是大多数资料都是针对MNIST数据集的,并且主要识别手写数字.为了满足实际的英文手写识别需求,需要从训练集 ...

  8. 第三节,TensorFlow 使用CNN实现手写数字识别(卷积函数tf.nn.convd介绍)

    上一节,我们已经讲解了使用全连接网络实现手写数字识别,其正确率大概能达到98%,这一节我们使用卷积神经网络来实现手写数字识别, 其准确率可以超过99%,程序主要包括以下几块内容 [1]: 导入数据,即 ...

  9. C基础 带你手写 redis adlist 双向链表

    引言 - 导航栏目 有些朋友可能对 redis 充满着数不尽的求知欲, 也许是 redis 属于工作, 交流(面试)的大头戏, 不得不 ... 而自己当下对于 redis 只是停留在会用层面, 细节层 ...

随机推荐

  1. plsql中文乱码 显示问号

    输入sql语句select * from V$NLS_PARAMETERS查看字符集,查看第一行value值是否为简体中文 解决方案: 新增环境变量 变量名: NLS_LANG 变量值: SIMPLI ...

  2. Java Foreach用法

    java中的while.for.if.switch等用法和c语言差不多,所以我们关注下foreach就行了. 一.创建ForeachTest.java public class ForeachTest ...

  3. Spring Boot系列教程十三:Spring boot集成Sentinel Redis

    前言 上一篇文章介绍了spring boot集成单点的redis,然而实际生产环境使用单点的redis风险很高,一旦宕机整个服务将无法使用,这篇文章介绍如何使用基于sentinel的redis高可用方 ...

  4. CSP-S初赛

    初赛都过了好几天了,现在才想起来写点关于初赛的博客也真是...... 我是福建人,是在福建的赛点参加的CSP-S组的初赛,能力其实很弱,估分只能60多一点点.真是害怕一不小心这篇博客就变成了我的退役博 ...

  5. SAS学习笔记34 指针控制

    指针控制符分为行指针和列指针两种 列指针控制符模式 @n:指明列的开始位置,是对应变量的数据开始列位置 列控制符号模式 n1-n2:n1列开始位置,n2列结束位置 @与@@符号应用 @行控制符号,控制 ...

  6. 列表初始化(list initialization)

    列表初始化啊就是大括号来初始化: 列表初始化的好处:

  7. Solr综合案例深入练习

    1. 综合案例 1.1. 需求 使用Solr实现电商网站中商品信息搜索功能,可以根据关键字.分类.价格搜索商品信息,也可以根据价格进行排序,并且实现分页功能. 界面如下: 1.2. 分析 开发人员需要 ...

  8. React-intl相关使用介绍

    React-intl用于国际化react组件,提供react组件和api来格式化日期.数字,字符等等.其中一个很重要的功能是实现文本翻译,将你所做的中文版应用所有文字转为英文. 关于配置什么的,请参照 ...

  9. springboot中使用验证码kaptcha

    1.pom.xml引入kaptcha所需要的jar包 <!-- 验证码 --> <dependency> <groupId>com.github.penggle&l ...

  10. 定时任务FluentScheduler

    1.Nuget 安装包 2.创建3个不同的任务 public class MyJob : IJob { void IJob.Execute() { Trace.WriteLine("现在时间 ...