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

Source

题解:

其实这个题是想到怎么hash比较难。

假设我们去统计这样一组数据

1 0 1 0

0 1 0 1

求前缀和是

0 0 0 0

1 0 1 0

1 1 1 1

观察这组数据,我们可以发现每个数据减去第一位就会得到相同的

#include <cstdio>
#include<cstring>
#include <queue>
#include <vector>
#include <iostream>
using namespace std;
const int MAXN=1e5+10;
int sum[MAXN][40];
vector<int>Hash[MAXN];
int n,k;
const int pri=100005; int abs(int x)
{
if(x<0) return -x;
return x;
}
queue<int>st;
void reslove(int x,int i)
{
while(x)
{
int z=x%2;
st.push(z);
x/=2;
}
while(st.size()<k)
{
st.push(0);
}
int num=0;
while(!st.empty())
{
if(st.front()==1)
{
sum[i][num]=sum[i-1][num]+1;
} else{
sum[i][num]=sum[i-1][num];
}
num++;
st.pop();
}
}
inline bool scan_d(int &num)//输入挂
{
char in;bool IsN=false;
in=getchar();
if(in==EOF) return false;
while(in!='-'&&(in<'0'||in>'9')) in=getchar();
if(in=='-'){ IsN=true;num=0;}
else num=in-'0';
while(in=getchar(),in>='0'&&in<='9'){
num*=10,num+=in-'0';
}
if(IsN) num=-num;
return true;
}
int main()
{
scanf("%d%d",&n,&k);
int x;
memset(sum,0, sizeof(sum));
for (int i = 1; i <=n ; ++i) {
scan_d(x);
reslove(x,i);
} for (int i = 0; i <=n ; ++i) {
int key=0;
for (int j = 1; j <k ; ++j) {
sum[i][j]-=sum[i][0];
key+=sum[i][j]*j;
}
key=abs(key)%pri;
Hash[key].push_back(i);
} int MAX=0;
for (int i = 0; i <100005 ; ++i) {
if(Hash[i].size()>1)
{
for (int j = 0; j <Hash[i].size()-1 ; ++j) {
for (int l = j+1; l <Hash[i].size() ; ++l) {
int flag=0;
for (int m = 1; m <k ; ++m) {
if(sum[Hash[i][j]][m]!=sum[Hash[i][l]][m])
{
flag=1;
break;
}
}
if(flag==0)
{
MAX=max(MAX,abs(Hash[i][j]-Hash[i][l]));
}
}
}
}
}
printf("%d\n",MAX);
return 0;
}
/*
7 3
7
6
7
2
1
4
2
-----------------------
11 5
30
28
24
16
1
3
7
15
16
24
31
------------
6 30
123456789
234567890
345678901
456789012
567890123
678901234
------------
250 3
6
3
1
3
6
7
0
7
6
0
1
3
3
4
3
3
2
2
4
7
3
2
3
0
0
6
2
1
7
2
3
3
5
2
5
2
2
5
0
2
4
5
5
1
4
4
6
3
5
7
7
5
7
7
4
0
0
7
1
3
4
7
2
3
7
5
2
6
2
3
2
0
3
2
4
6
1
1
2
7
1
6
0
5
3
4
6
1
7
5
7
4
2
2
7
1
7
0
7
6
2
3
0
3
5
5
3
1
7
1
7
6
5
3
1
5
6
3
4
0
1
1
2
7
6
1
2
4
1
3
0
4
6
2
6
6
7
6
0
1
7
1
7
5
7
7
3
7
7
5
0
2
6
4
1
3
1
3
7
4
0
6
1
1
4
1
6
7
2
5
4
7
1
7
4
2
2
3
4
0
1
1
0
1
6
1
7
4
6
3
3
7
7
5
3
6
5
1
4
4
1
3
6
4
4
2
0
4
3
7
7
7
3
6
7
3
1
0
2
2
6
1
6
4
7
4
4
6
5
6
5
6
7
4
3
7
1
5
4
0
2
7
1
7
4
4
7
2
2
4
------------
1 3
0
=============================================
下面是答案:
4
--------------
8
------------
0
------------
205
----------
1 */

  

Gold Balanced Lineup POJ - 3274的更多相关文章

  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

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

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

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

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

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

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

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

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

  7. poj 3274 Gold Balanced Lineup(哈希 )

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

  8. POJ 3274 Gold Balanced Lineup(哈希)

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

  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. TP5.0搭建restful API 应用

    1.配置环境变量,如果没配置会显示如下错误. 配置方法 1)右键此电脑-> 属性-> 高级系统设置->环境变量->Path 2)在Path后加上php目录的名称 如:E:\PH ...

  2. 《ArcGIS Runtime SDK for Android开发笔记》——(1)、Android Studio下载与安装

    1.前言 Android Studio 是一个Android开发环境,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工 ...

  3. [SVN]TortoiseSVN工具培训1─为什么要用SVN?

    你是否有经历过以下情况: SVN的使用理由/好处:

  4. selenium server在页面加载超时浏览器与driver通信失败时的妙用

    事实上,WebDriver有两种方式“驱动”浏览器的方式.1. Selenium Server:和Selenium RC一样的,通过指定远端服务器IP地址和端口号,由这个远端服务器来驱动浏览器.2. ...

  5. HCNA配置RIPv1

    1.拓扑图 2.配置 R1 The device is running! ###### <Huawei>sys Enter system view, return user view wi ...

  6. MAC读取希捷移动硬盘ntfs

    希捷提供了mac读取ntfs磁盘的软件,Paragon. 搜索关键词 "希捷" "mac" 或者通过以下链接进入 https://www.seagate.com ...

  7. Windows Host 文件

    Windows XP Home / Windows 7/ Windows Server 2008 c:\windows\system32\drivers\etc\hosts 如果碰到Localhost ...

  8. framework7 可以拉动右侧工具栏和点击当前item就可以出发事件的HTML结构

    <li class="swipeout"> <div class="swipeout-content item-content"> &l ...

  9. 如何在win10中安装ArcGIS10.2

    在win10中安装ArcGIS10.2,完美兼容,下面将自己在win10界面下的安装方法给大家分享一下. 工具/原料   win10环境 ArcGIS10.2安装包, 安装包地址链接: 链接: htt ...

  10. 2018.8.15 AOP面向切面编程简单理解

    在Filter过滤器中 拦截器 表面上看 -拦截器帮我们封装了很多功能 拦截器优秀的设计,可拔插设计 aop思想 在struts2中 归纳总结