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. u-boot分析(十)----堆栈设置|代码拷贝|完成BL1阶段

    u-boot分析(十) 上篇博文我们按照210的启动流程,分析到了初始化nand flash,由于接下来的关闭ABB比较简单所以跳过,所以我们今天按照u-boot的启动流程继续进行分析. 今天我们会用 ...

  2. 算法练习-寻找最小的k个数

    练习问题来源 https://wizardforcel.gitbooks.io/the-art-of-programming-by-july/content/02.01.html 要求 输入n个整数, ...

  3. 关于 IntelliJ IDEA 的Maven 版本修改

    Project Structure->Project里Project sdk以及project language level Project Structure->Modules里Sour ...

  4. 修改Linux中发送邮件中附件大小的限制

    方法一: 在命令中设定postfix的message_size_limit值 (但系统重启后会失效) postconf -e "message_size_limit = 20480000&q ...

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

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

  6. 解决使用phpmyadmin导出导入数据库时提示的“超出长度”、“超时”问题

    IIS请求筛选模块被配置为拒绝超过请求内容长度的请求 1. 修改IIS的applicationhost.config a.文件位置: %windir%/system32/inetsrv/config/ ...

  7. leetcode 141、Linked list cycle

    一种方法是用set存储出现过的指针,重复出现时就是有环: class Solution { public: bool hasCycle(ListNode *head) { set<ListNod ...

  8. C4C Product Price List的模型中和有效期相关的两个字段

    SAP C4C的price list实例可以在工作中心Products,视图Price Lists里看到. 我们点开第二个名为TEST的实例: 我写这篇文章的日期是2018年10月27日, 我现在把这 ...

  9. CRM WebClient UI和Hybris里工作中心跳转的url生成逻辑

    CRM WebClient UI 把Work center的navigation target在client side不可见:在Chrome development tool里看不到,而是点击了Wor ...

  10. MyBatis简单了解

    MyBatis 是什么? MyBatis 是一个简化和实现了 Java 数据持久化层(persistence layer)的开源框架,它抽象了大量的 JDBC 冗余代 码,并提供了一个简单易用的 AP ...