很不错的hash

优化有两个方面:1.根据题目换一个更优化的算法 2.在算法运行过程中优化

这题除了暴力好像没别的办法了吧?

但是暴力也是有策略的!

到第i只牛特征为j的总数为sum[i,j];

找到最大的区间(l,r]使得sum[r,1]-sum[l,1]=sum[r,2]-sum[l,2]…=sum[r,k]-sum[l,k]

整理就得sum[r,1]-sum[r,2]=sum[l,1]-sum[l,2] sum[r,1]-sum[r,3]=sum[r,1]-sum[r,3]……

于是做到每只牛的时候,我们就能得到一个序列。满足条件就是两个序列相等,

怎么快速判断序列:hash!得解!

 type link=^node;
     node=record
       data:longint;
       next:link;
     end;
const key=;
var hash:array[..] of link;
    sum:array[..] of longint;
    num:array[..,..] of longint;
    ans,n,k,x,j,i,s:longint;
function max(a,b:longint):longint;
  begin
    if a>b then exit(a) else exit(b);
  end; function allsame(x,y:longint):boolean;  //注意可能出现hash值相同但序列不同
  var i:longint;
  begin
    allsame:=true;
    for i:= to k do
      if num[x,i]<>num[y,i] then exit(false);
  end; procedure add(x,y:longint);
  var p:link;
  begin
    new(p);
    p^.data:=y;
    p^.next:=hash[x];
    hash[x]:=p;
  end; procedure push(x,i:longint);
  var p:link;
  begin
    if hash[x]=nil then add(x,i)
    else begin
      p:=hash[x];
      while p<>nil do
      begin
        if allsame(p^.data,i) then
        begin
          ans:=max(ans,i-p^.data);  //如果相同,那么当前序列就无需入hash
          exit;
        end;
        p:=p^.next;
      end;
      add(x,i);  //拉链法解决冲突
    end;
  end; begin
  readln(n,k);
  add(,);
  for i:= to n do
  begin
    readln(x);
    j:=;
    while x<> do
    begin
      j:=j+;
      sum[j]:=sum[j]+x mod ;
      x:=x shr ;
    end;
    s:=;
    for j:= to k do
    begin
      num[i,j]:=sum[]-sum[j];   //生成序列
      s:=(s+sqr(num[i,j])*j mod key) mod key ; //很奇怪的hash……
    end;
    push(s,i);  //hash值都不同那么序列一定不同
  end;
  writeln(ans);
end.

判断两个序列是否相同,hash是个好方法!

poj3274的更多相关文章

  1. POJ3274 hash

    POJ3274 问题重述: 已知有n头牛,用一个K位二进制数Ak,Ak-1,...,A1表示一头牛具有的特征,Ai=1表示具有特征i.现给定按顺序排列的N头牛的k位特征值,称某个连续范围内“特征平衡” ...

  2. POJ-3274 Gold Balanced Lineup---hash经典题!

    题目链接: https://vjudge.net/problem/POJ-3274 题目大意: 给定多头牛的属性,每头牛的属性由一个非负数表示,该数的二进制表示不会超过K位,它的二进制表示的每一位若为 ...

  3. [poj3274]排排站(Hash)

    题目:http://poj.org/problem?id=3274 题目大意:http://www.wikioi.com/problem/1247/ (此题中文版) 分析: 令sum[i][j]表示a ...

  4. poj3274 哈希

    这题终于让我AC了,其过程之艰辛我不想再回忆了,看了各种代码,一定要注意指针空和非空的问题,再一个要注意边界. #include <stdio.h> #include <string ...

  5. poj3274 Gold Balanced Lineup(HASH)

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

  6. poj3274 找平衡数列(哈希加一点数学思维)

    题目传送门 题目大意:有n只牛,每只牛有k个属性,接下来n个数字,每个数字的二进制位上的1和0分别表示某种属性的有或者无,然后一个特殊数列就是,一个区间内所有牛的各种属性的总和相等(有e种1属性  e ...

  7. poj题目

    poj2965 poj1753:标准的BFS+位运算优化 poj1328:线段覆盖变种,把圆对应到线段上,贪心求解 poj2109:高精度开根,二分+高精度,注意要判断答案的位数,如果按照题目给的范围 ...

  8. poj分类 很好很有层次感。

    初期: 一.基本算法:      (1)枚举. (poj1753,poj2965)      (2)贪心(poj1328,poj2109,poj2586)      (3)递归和分治法.      ( ...

  9. 【转】POJ题目分类推荐 (很好很有层次感)

    OJ上的一些水题(可用来练手和增加自信) (poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094)初期: 一. ...

随机推荐

  1. Visual C++2010开发权威指南 中文高清PDF - VC.NET

    第一部分  Visual C++ 2010开发与新特性第1章  Visual C++ 2010开发环境简介 11.1  Visual C++ 2010简介 11.2  Visual C++ 2010下 ...

  2. Linux分类笔记(一)-权限管理

    Linux分类笔记(一) 权限管理 普通权限 文件的普通权限 对一个普通的文件使用ls -ll命令后,看到下面的输出内容   而对于文件权限中的每一位,又分别代表了以下的意思 文件类型又有以下几类: ...

  3. python的浅拷贝和深拷贝

    python对象有两种拷贝的形式:浅拷贝和深拷贝. 在<python核心编程>中看到对这两种拷贝的分析,觉得十分收益,所以记录在此. id()方法:id()方法可以查看某个对象的ID,类似 ...

  4. 1087. All Roads Lead to Rome (30)

    时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Indeed there are many different ...

  5. fedora 20 PIL

    今天安装PIL花了我好多的时间. 刚开始,我手动下载PIL原码,编译安装. 启动我的django项目,报下面的错误,完全不懂是么意思. CommandError: One or more models ...

  6. iOS实例下载:使用腾讯的SDK将新浪微薄嵌入到应用中

    最近在做应用中添加SNS分享功能,只需要分享功能,腾讯的SDK和Demo还是挺直观的,看了下基本上就能用了,而新浪的Oauth认证看了个例子是跳出程序到Web上去认证的,体验很不好.不过Oauth认证 ...

  7. EXTJS 4.2 资料 控件之textfield文本框加事件的用法

    { xtype: "textfield", width: 100, id: "txtGroupName", name: "txtGroupName&q ...

  8. iOS 进阶 第一天(0323)

    0323 Storyboard连线错误 如下图: 不允许直接修改对象的结构体属性成员,但允许直接整体修改对象的结构体属性 如下图: 打印一个控件对象的frame 如下图: 如果一个控件无论怎么改变它的 ...

  9. 两年的坚持,最后还是决定将ISoft开源

    还记得2011年9月份,我在上大四,本来想着考研能上个好点的学校,可我怎么就不愿去自习室上自习.每天晚上睡觉前都告诉自己明天早晨一定早起去上自习,但又每次醒来都不想起床啊,懒,没办法.睡到不想再睡了才 ...

  10. CLSID {91493441-5A91-11CF-8700-00AA0060263B}错误

    最近遇到一个棘手的问题,在C#中处理PPT转HTML的过程中需要用到COM组件,按照往常的设置如下: 1. Start->Run->DCOMCNFG->Component Servi ...