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

题意+思路: 点击这里

补充:因为有减法运算,所以可能会造成运算后结果为负数,所以需要把结果统一转换成正数[不然数组下标访问不到负数位置],还有要先把0放入哈希表,不然会出现长度为1但是没有匹配的情况

比如:1 3

     7

结果为1,如果没把0放进哈希表则结果为0

  1. #include<iostream>
  2. #include<algorithm>
  3. #include<cstring>
  4. #include<string>
  5. #include<cstdio>
  6. #include<vector>
  7. #include<cmath>
  8. #include<time.h>
  9. using namespace std;
  10. typedef long long int LL;
  11. const int MAXN=+;
  12. const int MAXK=+;
  13. const int MOD=;
  14. int Num[MAXN][MAXK]; //data storage
  15. struct Node{
  16. int id,Next;
  17. }Cow[MAXN];
  18. int n,k,S[MAXN][MAXK];
  19. int Scnt,Head[MOD];//hash table
  20. void Init(){ //initialization
  21. memset(Head,-,sizeof(Head));
  22. memset(S,,sizeof(S));
  23. Scnt=;
  24. }
  25. void AddNode(int HashN,int idx){
  26. Cow[Scnt].id=idx;
  27. Cow[Scnt].Next=Head[HashN];
  28. Head[HashN]=Scnt++;
  29. }
  30. bool cmp(int idx,int idy){ //compare two array
  31. for(int i=;i<k;i++){
  32. if(S[idx][i]!=S[idy][i]){
  33. return false;
  34. }
  35. }
  36. return true;
  37. }
  38. int solve(){
  39. int ans=;
  40. for(int i=;i<=n;i++){ //insert 0 into the hash table first!
  41. int HashNum=; //i==0 then insert 0 into the hash table because Data from 1 to n
  42. for(int j=;j<k;j++){
  43. HashNum=((HashNum+S[i][j])+MOD)%MOD;
  44. }
  45. for(int j=Head[HashNum];j!=-;j=Cow[j].Next){
  46. if(cmp(i,j)){
  47. ans=max(ans,i-j);
  48. }
  49. }
  50. AddNode(HashNum,i);
  51. }
  52. return ans;
  53. }
  54. void make_S(){//make array S
  55. for(int i=;i<=n;i++){
  56. for(int j=;j<k;j++){
  57. S[i][j]=S[i-][j]+Num[i][j];
  58. }
  59. }
  60. }
  61. void make_C(){ //make array C
  62. for(int j=k-;j>=;j--){
  63. for(int i=;i<=n;i++){
  64. S[i][j]-=S[i][];
  65. }
  66. }
  67. }
  68. int main(){
  69. #ifdef kirito
  70. freopen("in.txt","r",stdin);
  71. freopen("out.txt","w",stdout);
  72. #endif
  73. int start=clock();
  74. while(~scanf("%d%d",&n,&k)){
  75. Init();
  76. for(int i=;i<=n;i++){
  77. int val;
  78. scanf("%d",&val);
  79. for(int j=;j<k;j++,val/=){
  80. Num[i][j]=val%;
  81. }
  82. }
  83. make_S(); make_C();
  84. printf("%d\n",solve());
  85. }
  86. #ifdef LOCAL_TIME
  87. cout << "[Finished in " << clock() - start << " ms]" << endl;
  88. #endif
  89. return ;
  90. }

POJ 3274 HASH的更多相关文章

  1. Gold Balanced Lineup - poj 3274 (hash)

    这题,看到别人的解题报告做出来的,分析: 大概意思就是: 数组sum[i][j]表示从第1到第i头cow属性j的出现次数. 所以题目要求等价为: 求满足 sum[i][0]-sum[j][0]=sum ...

  2. poj 3274 Gold Balanced Lineup(哈希 )

    题目:http://poj.org/problem?id=3274 #include <iostream> #include<cstdio> #include<cstri ...

  3. POJ 3274 Gold Balanced Lineup(哈希)

    http://poj.org/problem?id=3274 题意 :农夫约翰的n(1 <= N <= 100000)头奶牛,有很多相同之处,约翰已经将每一头奶牛的不同之处,归纳成了K种特 ...

  4. POJ 3349 HASH

    题目链接:http://poj.org/problem?id=3349 题意:你可能听说话世界上没有两片相同的雪花,我们定义一个雪花有6个瓣,如果存在有2个雪花相同[雪花是环形的,所以相同可以是旋转过 ...

  5. POJ 1840 HASH

    题目链接:http://poj.org/problem?id=1840 题意:公式a1x1^3+ a2x2^3+ a3x3^3+ a4x4^3+ a5x5^3=0,现在给定a1~a5,求有多少个(x1 ...

  6. POJ 2785 HASH

    题目链接:http://poj.org/problem?id=2785 题意:给定n行数字,每行4个数分别是a,b,c,d,现在要求能有多少个(a,b,c,d)组合并且和为0 思路:n^2统计所有(a ...

  7. 哈希 poj 3274

    n个牛 二进制最多k位 给你n个数 求max(j-i)&&对应二进制位的和相同 7    1  1  1  倒的 6    0  1  1 7    1  1  1 2    0  1 ...

  8. POJ 3274 Gold Balanced Lineup

    Gold Balanced Lineup Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10924 Accepted: 3244 ...

  9. POJ 3274 Gold Balanced Lineup 哈希,查重 难度:3

    Farmer John's N cows (1 ≤ N ≤ 100,000) share many similarities. In fact, FJ has been able to narrow ...

随机推荐

  1. 【leetcode】 Unique Binary Search Trees II (middle)☆

    Given n, generate all structurally unique BST's (binary search trees) that store values 1...n. For e ...

  2. 【剑指offer】题目20 顺时针打印矩阵

    输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1   2   3  4 5   6   7  8 9  10 11 12 13 14 15 16 则依次打印出 ...

  3. Vim 强大的配置

    新建文件.vimrc,然后复制如下内容,并将该文件放到vim安装目录下 map <F9> :call SaveInputData()<CR> func! SaveInputDa ...

  4. php 与 js 正则匹配

    php : <?php $str='<p>xxx</p>abc';$matches = array();if(preg_match('/<p>.*<\/ ...

  5. 查看base64编码图片

    1.确认编码纯净(没有编码参数) 2.在头部加上 data:image/jpeg;base64, 3.放到浏览器查看

  6. 001课-java_web开发入门

    一.Tomcat服务器常见启动问题:(1).Java_home环境变量,由于tomcat服务器的bin目录中的一些jar文件必须使用到java类库,所以必须先配置Java_home环境变量.(2).端 ...

  7. MySQL应用的异常记录

    >>Error Code: 1045. Access denied for user 'test'@'%' (using password: YES) 使用MySQL的select * i ...

  8. Android android:gravity属性介绍及效果图

    转自: http://blog.csdn.net/aminfo/article/details/7784229 Android:gravity的属性官方说明如下: public static fina ...

  9. python实现支持并发、断点续传的Ftp程序

    一.要求 1.用户md5认证 2.支持多用户同时登陆(并发) 3.进入用户的命令行模式,支持cd切换目录,ls查看目录子文件 4.执行命令(ipconfig) 5.传输文件: a.支持断点续传 b.传 ...

  10. [LeetCode] Rotate Image

    You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). ...