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. 关于修改test9ui布局的一些小笔记

    今早,上IT修真园里,看到师兄大娃很负责任的将我任务里的项目的排版,3,6,7的列了出来. 谢谢师兄,那么负责任的照看师弟. 言归正传,我一开始,直接按照师兄的指示,选择性的优先修改底部.效果也达到了 ...

  2. 零基础逆向工程33_Win32_07_创建线程

    1 什么是线程(Threads)? 什么是多线程? 怎么在windows中观察多线程? 线程可以简单理解为主程序为解决一个问题而选择的其中一条路线. 同理,多线程就是同时选择不同的路线来解决此问题. ...

  3. Android TextView之空格占位法

    在Android布局中进行使用到空格,为了实现文字的对齐.具体要怎么使用了? •请忽视文中‘& #160’中&和#之间的空格 空格: & #160; 窄空格: & #8 ...

  4. 轻松解决 Eclipse Indigo 3.7 中文字体偏小,完美 Consolas 微软雅黑混合字体!(转)

    在 Windows 7 下初始后化,发现界面变化不大,但中文字体却面目全非,小得根本看不见,而且也看起来很不爽.其实这是 Eclipse 的默认字体换了,以前的一直是 Courier New ,这次e ...

  5. php的yii框架开发总结7

    protected\config\main.php是整个网站中很重要的一个文件,引用文件,连接数据库,默认页面等都是在这里设置: 'import'=>array( 'application.mo ...

  6. Linux命令之查看内存和CPU消耗命令TOP使用

    1)输入top ,按enter键,即可查看服务器内存消耗情况 注意:其中PID表示进程号 :%cpu表示cpu消耗情况:%M表示内存消耗情况:通常在做性能测试的时候用到该命令: 默认为实时刷新:按s键 ...

  7. UI自动化录制工具----UI Recorder

    1.系统和工具包 windows 7 64位 jdk,nodejs,webdriver,浏览器都放在工具包目录内.(晚上回去把文件上传到云盘,在分享给大家) 2.安装JDK和node.js 2.1 J ...

  8. TP5.1 配置的获取与设置

    我们现在学习对配置文件的获取(Config::get)与设置(Config::set) 我们将学会: (1)获取到一级配置文件 (2)获取到二级配置文件 (3)设置二级配置文件 1.获取一级配置文件 ...

  9. 转载:手把手教你搭建 vue 环境

    以下内容转自: https://segmentfault.com/a/1190000008922234 第一步 node环境安装 1.1 如果本机没有安装node运行环境,请下载node 安装包进行安 ...

  10. Nodejs事件监听模块

    nodejs里面是不存在浏览器里面都冒泡,捕获这些行为的,所以Nodejs实现了events这个模块,里面大多数的模块都集成了这个模块,所以events是node模块里面最重要都一个模块,他对外只暴露 ...