zoukankan      html  css  js  c++  java
  • POJ 3274 Gold Balanced Lineup 哈希

    题目链接: http://poj.org/problem?id=3274

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <algorithm>
     4 
     5 bool feature[100001][30];
     6 int sum[100001][30], c[100001][30], n, k;
     7 const int prime = 99991;
     8 
     9 struct hash_table
    10 {
    11     int flag;
    12     struct hash_table *next;
    13 }*Hash[prime];
    14 
    15 int hash_insert(int key, int flag)
    16 {
    17     if(Hash[key] == NULL)
    18     {
    19         Hash[key] = new hash_table;
    20         Hash[key]->flag = flag;
    21         Hash[key]->next = NULL;
    22         return 0;
    23     }
    24     struct hash_table *p = Hash[key];
    25     while(p->next != NULL)
    26     {
    27         bool ok = 1;
    28         for(int i = 0; i < k; i++)
    29         {
    30             if(c[p->flag][i] != c[flag][i])
    31             {
    32                 ok = 0;
    33                 break;
    34             }
    35         }
    36         if(ok)return flag - p->flag;
    37         p = p->next;
    38     }
    39     for(int i = 0; i < k; i++)
    40     {
    41         if(c[p->flag][i] != c[flag][i])
    42         {
    43             p->next = new hash_table;
    44             p->next->flag = flag;
    45             p->next->next = NULL;
    46             return 0;
    47         }
    48     }
    49     return flag - p->flag;
    50 }
    51 
    52 int main()
    53 {
    54     int x;
    55     while(scanf("%d %d", &n, &k) != EOF)
    56     {
    57         memset(Hash, 0, sizeof(Hash));
    58         for(int i = 1; i <= n; i++)
    59         {
    60             scanf("%d", &x);
    61             for(int j = 0; j < k; j++)
    62                 feature[i][j] = (x >> j) & 1;
    63         }
    64         memset(sum[0], 0, sizeof(sum[0]));
    65         memset(feature[0], 0, sizeof(feature[0]));
    66         int ans = 0;
    67         hash_insert(0, 0);
    68         for(int i = 1; i <= n; i++)
    69         {
    70             int key = 0;
    71             for(int j = 0; j < k; j++)
    72             {
    73                 sum[i][j] = sum[i-1][j] + feature[i][j];
    74                 c[i][j] = sum[i][j] - sum[i][0];
    75                 key += c[i][j] * j;
    76             }
    77             ans = std::max(ans, hash_insert(std::abs(key)%prime, i));
    78         }
    79         printf("%d
    ", ans);
    80     }
    81     return 0;
    82 }
    View Code
  • 相关阅读:
    DirectShow自带实例StillCap在回调函数里实现抓图并保存为文件
    x264 VS2008下编译成功
    yuy2_to_i420,yuyv_to_i420
    x264源码阅读
    oracle 归档日志开启、关闭及删除归档日志
    TOMCAT设置JVM
    linux root 操作oracle命令
    struts2 标签判断list是否为空
    linux下mysql 5.5配置
    RHEL 6 下VNC Server 的安装配置
  • 原文地址:https://www.cnblogs.com/wolfred7464/p/3260304.html
Copyright © 2011-2022 走看看