HDU5183Negative and Positive (NP)(雜湊表)
題目連結:
http://acm.hdu.edu.cn/showproblem.php?pid=5183
題意:
給定一個長度為n的序列,判斷是否存在
一段序列 sum(i,j)= a i −a i+1 +a i+2 +⋯+(−1) j−i aj = k;
分析:
我們維護一段字首和
sum[j]表示從開始到第j個元素, 即 sum(0,j);
然後我們將其加入到雜湊表中
因為不同要麼是正負正 。。。。,要麼就是負正負。。。。的結構
因此我們維護兩個雜湊表
表1插入 sum ,表2插入-sum;
當i為奇數的時候在表2中查詢 sum-k;
當i為偶數的時候在表1中查詢 sum+k
然後判斷存不存在就好
程式碼如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL;
const int MAXN=1000010;
const int HASH=1000007;
inline LL read()//輸入外掛
{
char ch=getchar();LL x=0,f=1;
while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}
while(ch<='9'&&ch>='0'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
struct hashmap//建立雜湊表
{
LL a[MAXN];
int head[HASH],next[MAXN],size;
void init(){//初始化
memset(head,-1,sizeof(head));
size=0;
}
bool find(LL val){//查詢一個元素是否在雜湊表內
int tmp = (val%HASH + HASH)%HASH;
for(int i = head[tmp];i!=-1;i=next[i])
if(val==a[i]) return true;
return false;
}
void add(LL val){//新增元素到雜湊表中
int tmp =(val%HASH+HASH)%HASH;
if(find(val)) return;
a[size]=val;
next[size]=head[tmp];
head[tmp]=size++;
}
}h1,h2;
LL a[MAXN];
int main()
{
int t,n,cas=1,k;
t=read();
while(t--){
n=read();
k=read();
for(int i=0;i<n;i++)
a[i]=read();
LL sum=0;
h1.init(),h2.init();
h1.add(0),h2.add(0);
bool flag = 0;
for(int i=n-1;i>=0;i--){
if(i&1) sum-=a[i];
else sum+=a[i];
if(i%2==0){
if(h1.find(sum-k)) flag=1;
}
else{
if(h1.find(sum+k)) flag=1;
}
h1.add(sum);
h2.add(-sum);
if(flag) break;
}
printf("Case #%d: ",cas++);
if(flag)puts("Yes.");
else puts("No.");
}
return 0;
}
相關文章
- 雜湊表(雜湊表)詳解
- 雜湊表(雜湊表)原理詳解
- 雜湊表
- 【尋跡#3】 雜湊與雜湊表
- 字串雜湊表字串
- 6.7雜湊表
- 查詢(3)--雜湊表(雜湊查詢)
- 深入理解雜湊表(JAVA和Redis雜湊表實現)JavaRedis
- 雜湊表應用
- 雜湊表的原理
- 實現雜湊表
- 淺談雜湊表
- 符號表與雜湊表符號
- 幾道和雜湊(雜湊)表有關的面試題面試題
- R語言——雜湊表R語言
- JAVA 實現 - 雜湊表Java
- 【閱讀筆記:雜湊表】Javascript任何物件都是一個雜湊表(hash表)!筆記JavaScript物件
- 雜湊技術【雜湊表】查詢演算法 PHP 版演算法PHP
- 【資料結構與演算法學習】雜湊表(Hash Table,雜湊表)資料結構演算法
- 資料結構——雜湊表資料結構
- freeswitch APR庫雜湊表
- 談談面試--雜湊表系列面試
- 雜湊表(Hash)的應用
- 資料結構之「雜湊表」資料結構
- 雜湊表的兩種實現
- 從Dictionary原始碼看雜湊表原始碼
- 雜湊表知識點小結
- iOS雜湊表快取窺探iOS快取
- 演算法學習-雜湊表演算法
- PHP雜湊表碰撞攻擊原理PHP
- 資料結構 - 雜湊表,初探資料結構
- 雜湊表hashtable課堂筆記筆記
- js 雜湊雜湊值的模組JS
- Python:說說字典和雜湊表,雜湊衝突的解決原理Python
- Day76.雜湊表、雜湊函式的構造 -資料結構函式資料結構
- 雜湊
- 資料結構與演算法——雜湊表類的C++實現(探測雜湊表)資料結構演算法C++
- 圖解兩數之和:雜湊表法圖解