程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> HDU5183Negative and Positive (NP)(哈希表)

HDU5183Negative and Positive (NP)(哈希表)

編輯:C++入門知識

HDU5183Negative and Positive (NP)(哈希表)


 

 

題意:

給定一個長度為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 
#include 
#include 
#include 

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=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;
}

 

 

??

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved