hdu-5183(set &&hash)
来源:互联网 发布:网络编码器 编辑:程序博客网 时间:2024/04/28 16:03
题意:问是否存在 NP−sum(i,j)=ai−ai+1+ai+2-...+(−1)j−iaj(即+ - + -),和等于k
(i,j)区间的和可以由sum[j]-sum[i-1]求得。
所以可以用哈希思想,从n~1倒序将sum[i]标记,判断sum[i-1]+k是否存在
注意:1.因为是交替加减,所以当i%2==0时判断sum[i-1]-k
(i,j)区间的和可以由sum[j]-sum[i-1]求得。
所以可以用哈希思想,从n~1倒序将sum[i]标记,判断sum[i-1]+k是否存在
注意:1.因为是交替加减,所以当i%2==0时判断sum[i-1]-k
***2.因为hash存储范围太大,用set容器来实现哈希存储
/*题意:问是否存在 NP−sum(i,j)=ai−ai+1+ai+2-...+(−1)j−iaj(即+ - + -),和等于k(i,j)区间的和可以由sum[j]-sum[i-1]求得。所以可以用哈希思想,从n~1倒序将sum[i]标记,判断sum[i-1]+k是否存在注意:1.因为是交替加减,所以当i%2==0时判断sum[i-1]-k ***2.因为hash存储范围太大,用set容器来实现哈希存储*/#include <cstdio>#include <cstring>#include<iostream>#include<map>#include<string>#include <set>#include<string.h>using namespace std;#define ll long longconst int N=1e6+5;ll f[N];ll sum[N];set<ll> ss;int main(){ int T; int n,k; cin>>T; for(int t=1;t<=T;t++) { scanf("%d%d",&n,&k); memset(sum,0,sizeof(sum)); ss.clear(); for(int i=1;i<=n;i++) { scanf("%I64d",&f[i]); sum[i]=sum[i-1]+(i%2?f[i]:-f[i]); } bool b=false; //ss.insert(sum[n]); for(int i=n;i>=1;i--) { if(b) break; ss.insert(sum[i]); if(i%2){ if(ss.find(sum[i-1]+k)!=ss.end()) b=true; } else if(ss.find(sum[i-1]-k)!=ss.end()) b=true; } printf("Case #%d: ",t); if(b) printf("Yes.\n"); else printf("No.\n"); } return 0;}
0 0
- hdu-5183(set &&hash)
- hdu 5183 hash
- hdu 5183 hash
- Hash Map / Hash Set
- HDU 3006 The Number of set (状态压缩+hash)
- hdu 5183 hash+前缀和
- stl之hash set
- Set/ZSet/Hash/List
- HDU 5183 - Negative and Positive (NP)(Hash)
- HDU 5183 Negative and Positive (NP) (hash)
- map,set,unordered_map,hash总结
- HDU-1280 HASH
- hdu 1004 hash map
- HDU 1381 hash
- HDU 1496 Equations (hash)
- hdu-1496(hash)
- hdu-4334(hash)
- hdu 1067 BFS + hash
- 2015编程之美资格赛B
- 破解Revealapp的试用时间限制
- IOS 输入键盘问题集
- 简述负载均衡和CDN技术
- eclipse下安装配置hadoop(含WordCount程序测试)
- hdu-5183(set &&hash)
- 巩固java(五)----通过实例理解java多态
- Android RecyclerView 使用完全解析 体验艺术般的控件
- startActivityForResult用法详解
- Monte Carlo 的一些想法
- DirectX9 内存池
- Note (jsp)
- <input type="file" />浏览时只显示指定文件类型
- sublime text 3安装、破解与Python 3 IDE搭建