http://poj.org/problem?id=3274

题意 :农夫约翰的n(1 <= N <= 100000)头奶牛,有很多相同之处,约翰已经将每一头奶牛的不同之处,归纳成了K种特性,比如1号特性代表它身上有斑点,2号特性代表它比较喜欢用passcal 写程序而不是C 。约翰使用“特性标识符”来描述奶牛的各种特性,例如:一头奶牛的特性标识符是13,将13写成二进制1101,从右向左看,就表示这头奶牛具有1,3,4这三个特性,但没有2号特性,约翰把n头奶牛排成一排,发现在有些连续区间里的奶牛,每种特性出现的次数是一样的,约翰把这样的区间成为平衡的,约翰希望你帮忙找出平衡区间的最大长度 。

思路:虽说知道这个题要用哈希,但是却不知道具体怎么用哈希,我觉得这个题真是有够麻烦的。

数组sum[i][j]表示从第1到第i头cow属性j的出现次数。

所以题目要求等价为: 求满足 sum[i][0]-sum[j][0]=sum[i][1]-sum[j][1]=.....=sum[i][k-1]-sum[j][k-1] (j<i)  中最大的i-j

将上式变换可得到

sum[i][1]-sum[i][0] = sum[j][1]-sum[j][0]

sum[i][2]-sum[i][0] = sum[j][2]-sum[j][0]

......

sum[i][k-1]-sum[i][0] = sum[j][k-1]-sum[j][0]

令C[i][y]=sum[i][y]-sum[i][0] (0<y<k)

初始条件C[0][0~k-1]=0

所以只需求满足C[i][]==C[j][] 中最大的i-j,其中0<=j<i<=n。

C[i][]==C[j][] 即二维数组C[][]第i行与第j行对应列的值相等,

那么原题就转化为求C数组中 相等且相隔最远的两行的距离i-j

样例解释:先将十进制转化成二进制(因为题目中转化成的二进制是从左往右读的)

7---->111

6---->011

7---->111

2---->010

1---->100

4---->001

2---->010

将这7行二进制逐行累加得到

111

122

233

243

343

344

354

再利用C[i][y]=sum[i][y]-sum[i][0]求C数组,即所有列都减去第一列(注意C数组有第0行,为全0)

0 0 0 -->第0行

0 0 0

0 1 1

0 1 1

0 2 1

0 1 0

0 1 1

0 2 1

显然第2行与第6行相等,均为011,且距离最远,距离为6-2=4,这就是所求。

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string.h> using namespace std ; const int maxx = ;
const int maxn = ;
int sum[maxx][maxn];
int head[maxx],next[maxx] ;
int K ; int hash(int c[])
{
int h = ;
for(int i = ; i < K ; i++)
h = ((h << ) + (c[i] >> ))^(c[i] << ) ;
h = h % maxx ;
h = h < ? (h+maxx) : h ;
return h ;
} int main()
{
int N ,f;
memset(head ,- ,sizeof(head)) ;
memset(sum,,sizeof(sum)) ;
int ans = ;
scanf("%d %d",&N,&K) ;
for(int i = ; i <= N ; i++)
{
scanf("%d",&f) ;
for(int j = ; j < K ; j++)
{
sum[i][j] = f & ;
f = f >> ;
}
}
for(int i = ; i <= N ; i++)
{
for(int j = ; j < K; j++)
sum[i][j] += sum[i-][j] ;
}
for(int i = ; i <= N ; i++)
{
int temp = sum[i][] ;
for(int j = ; j < K; j++)
sum[i][j] -= temp ;
int h = hash(sum[i]) ;
bool flag = ;
for(int e = head[h] ; e != - ; e = next[e])
{
if(memcmp(sum[e],sum[i],sizeof(sum[i])) == )
{
ans = max(ans,i-e ) ;
flag = ;
break ;
}
}
if(!flag)
{
next[i] = head[h] ;
head[h] = i ;
}
}
printf("%d\n",ans) ;
return ;
}

POJ 3274 Gold Balanced Lineup(哈希)的更多相关文章

  1. poj 3274 Gold Balanced Lineup(哈希 )

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

  2. 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 ...

  3. POJ 3274 Gold Balanced Lineup

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

  4. Gold Balanced Lineup(哈希表)

    Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10711   Accepted: 3182 Description Farm ...

  5. POJ 3274:Gold Balanced Lineup 做了两个小时的哈希

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

  6. 哈希-Gold Balanced Lineup 分类: POJ 哈希 2015-08-07 09:04 2人阅读 评论(0) 收藏

    Gold Balanced Lineup Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 13215 Accepted: 3873 ...

  7. 1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列

    1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 510  S ...

  8. 洛谷 P1360 [USACO07MAR]Gold Balanced Lineup G (前缀和+思维)

    P1360 [USACO07MAR]Gold Balanced Lineup G (前缀和+思维) 前言 题目链接 本题作为一道Stl练习题来说,还是非常不错的,解决的思维比较巧妙 算是一道不错的题 ...

  9. 【POJ】3264 Balanced Lineup ——线段树 区间最值

    Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 34140   Accepted: 16044 ...

随机推荐

  1. 亲测 asp.net 调用 webservice返回json

    前端脚本 $("#sure").click(function () { var tbody = $("#putsigal tbody"); var trs = ...

  2. PHP输入流php://input介绍

    在使用xml-rpc的时候,server端获取client数据,主要是通过php输入流input,而不是$_POST数组.所以,这里主要探讨php输入流php://input 对一php://inpu ...

  3. 让aspx页面也可以通过url路由进行访问

    参考文章:http://blog.csdn.net/zhanglong_longlong/article/details/8841030 这两天,在工作中需要将aspx的页面虚拟成url路径访问.比如 ...

  4. ugui自制摇杆。

    珍爱生命,远离插件. 以上8个字,好好理解. 反正我是这么觉得. 我说的是unity,不是魔兽世界. 总有一天,我会一句一句写出属于自己的东西. 可以开始主题了.         如图所示,建立一个画 ...

  5. 包含为 HTTP 定义的状态代码的值(枚举)

    using System; namespace System.Net { // 摘要: // 包含为 HTTP 定义的状态代码的值. public enum HttpStatusCode { // 摘 ...

  6. 07_XPath_01_入门

    [工程截图] [person.xml] <?xml version="1.0" encoding="UTF-8"?> <students> ...

  7. error RC1205: invalid code page

    Get followings error and warnings when building project: error RC1205: invalid code pagewarning C400 ...

  8. resin的简单介绍和使用

    1.resin是一款应用服务器(application server),它自身也包含一款支持Http1.1协议的WEB服务器(web server),它也可以和其他的web服务器一起工作如IIS和Ap ...

  9. php json_encode()和json_decode()

    json_encode()和json_decode()分别是编译和反编译过程 注意json只接受utf-8编码的字符,所以json_encode()的参数必须是utf-8编码,否则会得到空字符或者nu ...

  10. js实现克隆一个对象

    var app={}; app.cloneobj= function(obj){ var o; if(typeof obj == "object"){ if(obj===null) ...