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 只是停留在会用层面, 细节层 ...
随机推荐
- 开源定时任务框架Quartz(二)
概述 上一篇文章完成了第一个Quartz程序的编写,这篇从Quartz中的几个重要对象来更深一层认识Quartz框架. Job和JobDetail Job是Quartz中的一个接口,接口下只有exec ...
- C++:链表(初识链表)
介绍 链表是把若干个对象用指针串联起来,形成一个链状的数据结构,链表在开发中很重要. 1.链表特征:只需要知道一个链表头,就能访问每个节点的对象. 2.链表遍历:通过每个节点指针next来对的下一个节 ...
- WebElement的方法:
这个类代表HTML页面元素 id_ #当前元素的ID tag_name #获取元素标签名的属性 text #获取该元素的文本. click() #单击(点击)元素 submit() #提交表单 cle ...
- 模块 os 和 sys
目录 os 模块 sys 模块 os 模块 os 模块是与操作系统交互的一个接口 方法 详解 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir(&quo ...
- PAT(B) 1012 数字分类(Java)
题目链接:1012 数字分类 代码 /** * Score 20 * Run Time 142ms * @author wowpH * @version 1.1 */ import java.util ...
- pandas数据结构之基础运算笔记
import pandas as pd import numpy as np s = pd.Series([1,3,5,6,8],index=list('acefh')) s.index # 读取行索 ...
- 关于Python的导入覆盖解决办法
这种问题一般来说还是不会引起的,可能会出现在datetime和time这样类型的模块中. 例如: import datetime from datetime import datetime 如果写在一 ...
- SAS学习笔记35 options语句
- css line-height & 图片底部间隙的处理
前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! 看大牛张鑫旭的视屏可能会理解的更深一些,点击这里 . line-height 的学习 line-heigh ...
- hdu 1203 转换的01包问题。。。。
俗话说的话 正难则反.,. 这个基本的思想都用不好的话 回家种田去吧. #include<cstdio> #include<string.h> #include<ios ...