POJ 3274 Gold Balanced Lineup(哈希)
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(哈希)的更多相关文章
- poj 3274 Gold Balanced Lineup(哈希 )
题目:http://poj.org/problem?id=3274 #include <iostream> #include<cstdio> #include<cstri ...
- 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 ...
- POJ 3274 Gold Balanced Lineup
Gold Balanced Lineup Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10924 Accepted: 3244 ...
- Gold Balanced Lineup(哈希表)
Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10711 Accepted: 3182 Description Farm ...
- POJ 3274:Gold Balanced Lineup 做了两个小时的哈希
Gold Balanced Lineup Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 13540 Accepted: ...
- 哈希-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 ...
- 1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列
1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 510 S ...
- 洛谷 P1360 [USACO07MAR]Gold Balanced Lineup G (前缀和+思维)
P1360 [USACO07MAR]Gold Balanced Lineup G (前缀和+思维) 前言 题目链接 本题作为一道Stl练习题来说,还是非常不错的,解决的思维比较巧妙 算是一道不错的题 ...
- 【POJ】3264 Balanced Lineup ——线段树 区间最值
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 34140 Accepted: 16044 ...
随机推荐
- [MSDN]使用 REST 处理文件夹和文件
msdn: http://msdn.microsoft.com/zh-cn/library/dn292553.aspx 了解如何使用 SharePoint 2013 REST 界面对文件夹和文件执行基 ...
- JDK Tools - xjc: 将 XML Schema 编译成 Java 类
xjc 是 JAXB 将 xsd 生成 Java 类的工具. 命令格式 xjc [ options ] schema file/URL/dir/jar ... [-b bindinfo ] ... 命 ...
- Maven POM.xml (转)
简介 pom.xml文件是Maven进行工作的主要配置文件.在这个文件中我们可以配置Maven项目的groupId.artifactId和version等Maven项目必须的元素:可以配置Maven项 ...
- Sqlserver 理解子查询
理解子查询: 理解子查询: 多表连接查询往往也可以用子查询进行替代 子查询本质是嵌套进其他 select update insert Delete 语句的一个被限制的select语句,在子查询中,只有 ...
- db2相关问题及解决方法
DB2相关问题及解决方法: 一.DB2中的代码页(codepage)问题. DB2备份时发生过代码页错误的问题,修改代码页后备份正常,但创建数据库时又发生代码页的错误.这是DB2服务器使用的代码页配置 ...
- android loadlibrary 更改libPath 路径,指定路径加载.so
http://www.jianshu.com/p/f751be55d1fb 字数549 阅读177 评论0 喜欢0 需求很简单 ,就是加载指定文件夹下的.so. 原因:android在程序运行的状态下 ...
- ios - 再细读KVO
[罗国强原创] KVO - Key-Value Observing. 它提供了一种机制,允许对象被通知到其他对象的具体特性的变化.它特别适用于一个应用的模型层与控制层的交互. 一种典型的应用场景是在一 ...
- 10_Jaxws使用自定义pojo发布服务
[简述] 查询三天的天气信息(天气概况.日期.温度),测试jaxws是否支持自定义pojo发布服务. [开发过程] 服务端: 1.自定义pojo(天气概况.日期.温度) 2.开发SEI接口及实现类 3 ...
- Android NDK 环境搭建 + 测试例程
懒得废话一大堆概念,关于ADT.NDK的概念要是你不懂,怎么会搜到这里来?所以你只需要根据下面的步骤来,就可以完成NDK环境搭建了. 步骤:(假设你未安装任何相关开发工具,如果已经安装了,就可以跳过) ...
- RabbitMQ远程访问配置
1 首先创建一个新的账户 并给上Administrator标签 2然后给这个新账户添加虚拟主机访问权限 3在windows 下的 rabbitmq安装文件下的etc文件下的配置文件添加以下 [ ...