zoukankan      html  css  js  c++  java
  • hdu-5183-Negative and Positive (NP)(hash模板)

    题目链接

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <algorithm>
     5 
     6 using namespace std;
     7 
     8 typedef long long LL;
     9 
    10 const int MAXN=1000010;
    11 const int HASH=1000007;
    12 
    13 inline LL read()//输入外挂
    14 {
    15     char ch=getchar();LL x=0,f=1;
    16     while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}
    17     while(ch<='9'&&ch>='0'){x=x*10+ch-'0';ch=getchar();}
    18     return x*f;
    19 }
    20 
    21 struct hashmap//建立哈希表
    22 {
    23     LL a[MAXN];
    24     int head[HASH],next[MAXN],size;
    25     void init(){//初始化
    26         memset(head,-1,sizeof(head));
    27         size=0;
    28     }
    29     bool find(LL val){//查找一个元素是否在哈希表内,一个hash值可能对应多个值,在这几个值中查找 
    30         int tmp = (val%HASH + HASH)%HASH;
    31         for(int i = head[tmp];i!=-1;i=next[i])
    32             if(val==a[i]) return true;
    33         return false;
    34     }
    35     void add(LL val){//添加元素到哈希表中
    36         int tmp =(val%HASH+HASH)%HASH;
    37         if(find(val)) return;
    38         a[size]=val;
    39         next[size]=head[tmp];//冲突值对应同一个 hash值 
    40         head[tmp]=size++;//head保存每个值的下标 
    41     }
    42 }h1,h2;
    43 
    44 LL a[MAXN];
    45 
    46 int main()
    47 {
    48     int t,n,cas=1,k;
    49     t=read();
    50     while(t--){
    51         n=read();
    52         k=read();
    53         for(int i=0;i<n;i++)
    54             a[i]=read();
    55         LL sum=0;
    56         h1.init(),h2.init();
    57         h1.add(0),h2.add(0);
    58         bool flag = 0;
    59         for(int i=n-1;i>=0;i--){
    60             if(i&1) sum-=a[i];
    61             else sum+=a[i];
    62             if(i%2==0){
    63                 if(h1.find(sum-k)) flag=1;
    64             }
    65             else{
    66                 if(h1.find(sum+k)) flag=1;
    67             }
    68             h1.add(sum);
    69             h2.add(-sum);
    70             if(flag) break;
    71         }
    72         printf("Case #%d: ",cas++);
    73         if(flag)puts("Yes.");
    74         else puts("No.");
    75     }
    76     return 0;
    77 }
  • 相关阅读:
    TCP三次握手四次挥手
    TCP与UDP的区别
    mysql从库设置全局只读,并创建普通账号
    docker安装mysql主从
    mysql 更换数据目录
    Docker 部署 ElasticSearch
    js获取地址栏传参
    PHP-MySQL基本操作
    基于element-tree-table树型表格点击节点请求数据展开树型表格
    拖拽读取文件
  • 原文地址:https://www.cnblogs.com/slothrbk/p/8832472.html
Copyright © 2011-2022 走看看