题目链接:点击打开链接

Gold Balanced Lineup

Time Limit: 2000MS   Memory Limit: 65536K
Total Submissions: 16978   Accepted: 4796

Description

Farmer John's N cows (1 ≤ N ≤ 100,000) share many similarities. In fact, FJ has been able to narrow down the list of features shared by his cows to a list of only K different features (1 ≤ K ≤ 30). For example, cows exhibiting feature #1 might have spots, cows exhibiting feature #2 might prefer C to Pascal, and so on.

FJ has even devised a concise way to describe each cow in terms of its "feature ID", a single K-bit integer whose binary representation tells us the set of features exhibited by the cow. As an example, suppose a cow has feature ID = 13. Since 13 written in binary is 1101, this means our cow exhibits features 1, 3, and 4 (reading right to left), but not feature 2. More generally, we find a 1 in the 2^(i-1) place if a cow exhibits feature i.

Always the sensitive fellow, FJ lined up cows 1..N in a long row and noticed that certain ranges of cows are somewhat "balanced" in terms of the features the exhibit. A contiguous range of cows i..j is balanced if each of the K possible features is exhibited by the same number of cows in the range. FJ is curious as to the size of the largest balanced range of cows. See if you can determine it.

Input

Line 1: Two space-separated integers, N and K.

Lines 2..N+1: Line i+1 contains a single K-bit integer specifying the features present in cow i. The least-significant bit of this integer is 1 if the cow exhibits feature #1, and the most-significant bit is 1 if the cow exhibits feature #K.

Output

Line 1: A single integer giving the size of the largest contiguous balanced group of cows.

Sample Input

7 3
7
6
7
2
1
4
2

Sample Output

4

Hint

In the range from cow #3 to cow #6 (of size 4), each feature appears in exactly 2 cows in this range

题目大意:n头牛,有k种特征。给出每种奶牛的ID,他的二进制的1的位数表示他有哪个特征,求奶牛每种特征出现次数相同的连续最长长度。

解释:

思路:看了题解理解了。根据条件:区间每种特征出现次数相同。用sum[i][j]表示从1到i头牛的j特征出现的次数。那么就有:sum[i][0] - sum[j][0] = sum[i][1] - sum[j][1] = ......= sum[i][k-1] - sum[j][k-1]   上式可以改写为: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][Y] = 0  所以只需要求 C[i][] == C[j][] 中j-i的最大值

AC代码:

#include<iostream>
#include<string.h>
#include<vector>
#include<math.h>
using namespace std;
const int N=100010;
const int inf=1<<29;
int n,k,tz[N][40],ms[N][40],sum[N][40],key[N],ans;
vector<int>a[N];// void search(int knum,int id) {
int len=a[knum].size();
for(int j=0; j<len; ++j) {//这种key里的id的C数组的数字是否全部一样
int f=1;
for(int l=0; l<k; ++l)
if(ms[a[knum][j]][l]!=ms[id][l]) {
f=0;
break;
}
if(f) {
ans=max(ans,id-a[knum][j]);
return;
}
}
a[knum].push_back(id);//这种key里所有的id
}
int main() {
int t,i,j;
scanf("%d%d",&n,&k);//得到sum数组
for(int i=1; i<=n; ++i) {
scanf("%d",&t);
for(int j=0; j<k; ++j) {
tz[i][j]=t%2;
t/=2;
}
}
for(i=0; i<N; ++i) a[i].clear();
a[0].push_back(0);
for(i=1; i<=n; ++i) {//得到C数组 并且求得每一头牛的哈希值
for(j=0; j<k; ++j) {
sum[i][j]=sum[i-1][j]+tz[i][j];
ms[i][j]=sum[i][j]-sum[i][0];
key[i]+=ms[i][j];
}
key[i]=abs(key[i])%N;
}
for(i=1; i<=n; ++i) search(key[i],i);//搜
printf("%d",ans);
return 0;
}

以上的代码比较好理解,上面的解释参考了两位神犇的博客:

神犇①点击打开链接                    神犇②点击打开链接

还有一道与该题思路一样的题目:点击打开链接  可以对比理解

POJ3274-Gold Balanced Lineup的更多相关文章

  1. poj3274 Gold Balanced Lineup(HASH)

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

  2. POJ 3274 Gold Balanced Lineup

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

  3. 哈希-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 ...

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

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

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

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

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

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

  7. Gold Balanced Lineup POJ - 3274

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

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

  9. Gold Balanced Lineup(哈希表)

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

  10. bzoj 1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列——map+hash+转换

    Description N(1<=N<=100000)头牛,一共K(1<=K<=30)种特色, 每头牛有多种特色,用二进制01表示它的特色ID.比如特色ID为13(1101), ...

随机推荐

  1. deepmoji:文本预测emoji

    输入句子,预测emoji demo: https://deepmoji.mit.edu/ github: https://github.com/bfelbo/DeepMoji  能够被预测的emoji ...

  2. Linux下视频流媒体直播服务器搭建详解

    目标: 搭建网络直播流媒体服务器系统(Linux操作系统) 背景: 用于OTT-TV大并发的直播和点播的一套流媒体服务器系统.支持N x 24小时录制回看和直播的服务器端解决方案. 解决方案: l  ...

  3. redis的缓存穿透 缓存并发 缓存失效

    我们在用缓存的时候,不管是Redis或者Memcached,基本上会通用遇到以下三个问题: 缓存穿透 缓存并发 缓存失效 一.缓存穿透 Paste_Image.png Paste_Image.png ...

  4. JEECG datagrid 列表检索条件 添加下拉级联功能

    $("#communityId").change( function(){ var id = $(this).children('option:selected').val(); ...

  5. 江苏省大学生程序设计竞赛(JSCPC)赛后感

    仔细的算了一下,这是我第6次参加与acm有关的比赛了,每一次的经历,在我看来都是一次对自己能力的认识与评估,身边学计算机专业的同龄人对这项比赛的热爱,专注,勇气以及所获得的成就让要好好努力,更要加倍付 ...

  6. centos7 查看启动ntp服务命令

    标签(空格分隔): centos7 系统 1. 查看ntp服务命令: [root@node1 ~]# systemctl status ntpd * ntpd.service - Network Ti ...

  7. stm32之外设控制

    本文将提到以下内容: 蜂鸣器 按键控制 电容触摸 温度传感器 红外 TFTLCD触摸屏 MPU6050传感器 SPI-FLASH SDIO_SD卡 ucos-III移植 一.蜂鸣器 蜂鸣器是一种一体化 ...

  8. C#设计模式(8)——桥接模式

    一.概念 桥接模式即将抽象部分与实现部分脱耦,使它们可以独立变化. 二.模型 三.代码实现 // 客户端调用 // 类似Web应用程序 class Client { static void Main( ...

  9. source in sight 删除工程

    用十六进制编辑器打开  "我的文档/Source Insight/Projects/PROJECTS.DB3" 文件 ,找到你要删除的项目路径及名称字符串,用0替换相关位置的数据.

  10. [hdu1402]A * B Problem Plus(FFT模板题)

    解题关键:快速傅里叶变换fft练习. 关于结果多项式长度的确定,首先将短多项式扩展为长多项式,然后扩展为两倍. #include<cstdio> #include<cstring&g ...