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. cf868F. Yet Another Minimization Problem(决策单调性 分治dp)

    题意 题目链接 给定一个长度为\(n\)的序列.你需要将它分为\(m\)段,每一段的代价为这一段内相同的数的对数,最小化代价总和. \(n<=10^5,m<=20\) Sol 看完题解之后 ...

  2. js-对象的方法详解

    Object.prototype 上的方法: constructor 返回创建该对象的构造函数 var arr = []; arr.constructor == function Array() { ...

  3. 什么是TOPO学

    拓扑,一个跟门萨同样古怪的“科技Word”.其定义,对绝大多数读者而言,不一定需要理解,但无妨知道———拓扑学,数学的一门分科,研究几何图形在一对一的双方连续变换下不变的性质.不少门萨题,来自拓扑学, ...

  4. Android 应用监听自身卸载,弹出用户反馈调查

    监听卸载情景和原理分析 1,情景分析 在上上篇博客中我写了一下NDK开发实践项目,使用开源的LAME库转码MP3,作为前面几篇基础博客的加深理解使用的,但是这样的项目用处不大,除了练练NDK功底.这篇 ...

  5. [RDLC]心得整理(一)

    2014年在做项目的时候, 过用过RDLC, 之后便在没有使用过了. 最近又有项目使用rdlc, 感觉有些陌生,然后重新阅读了以前的笔记,想做一下整理. 常见问题: 1. 为什么rdlc报表出来的pd ...

  6. Python基础学习之标识符

    1.合法的Python标识符 Python标识符字符串规则和其他大部分用C编写的高级语言相似: 第一个字符必须是字母或下划线(_) 剩下的字符可以是字母和数字或下滑线 大小写敏感 标识符不能以数字开头 ...

  7. 通过windows计划任务和Dos批处理备份文件

    目的: 1.计划每天每半小时备份1次,每天8点开始,执行12小时,20点结束. 2.定期删除历史备份文件,由于每天有多个时间段备份,删除前只保留当天最后一个备份. 说明: 由于删除的操作只有每天第一次 ...

  8. 关于ASP.NET页面事件的知识点

    ASP是动态服务器页面(ActiveServerPage)的英文缩写,是微软公司开发的代替CGI脚本程序的一种应用,它可以与数据库和其它程序进行交互,是一种简单.方便的编程工具.那么关于ASP.NET ...

  9. 【微软大法好】VS Tools for AI全攻略(4)——选择适合自己的虚拟机

    当我们选择好了自己的虚拟机后,也许效果不尽如人意.就比如我,发现代码在训练一段时间之后,CPU的使用率会下降. 这个时候我们就要开始考虑,是不是我们选择的虚拟机不是适合自己的型号. Azure的虚拟机 ...

  10. java 网络流 TCP/UDP

    一.ServerSocket java.lang.Object |-java.net.ServerSocket 有子类SSLServerSocket. 此类实现服务器套接字.服务器套接字等待请求通过网 ...