记录编号 39489 评测结果 AAAAAAAAAAAA
题目名称 平衡奶牛 最终得分 100
用户昵称 GravatarMakazeu 是否通过 通过
代码语言 C++ 运行时间 0.345 s
提交时间 2012-07-12 10:07:29 内存使用 12.91 MiB
显示代码纯文本
/*
*Problem : balline
*Author  : Yee-fan Zhu
*Data    : July 11,2012
*Sol	 : Hash(STL map)
*/
#include <cstdlib>
#include <cstdio>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
typedef unsigned long long ull;
const int MAXN=100100;
class Cow
{
public:
	ull bit; int skill[31];
}C[MAXN];
int S[31],N,K;
typedef vector<int> Vec;
map<Vec,int> hash;

inline void init()
{
	int n,t=1;
	scanf("%d %d\n",&N,&K);
	for(int i=1;i<=N;i++) 
	{
		scanf("%lld",&C[i].bit);
		ull tmp=C[i].bit; t=1;
		while(tmp)
		{
			n=tmp&1;
			if(n) C[i].skill[t]=C[i-1].skill[t]+1;
			else C[i].skill[t]=C[i-1].skill[t];
			tmp=tmp>>1;t++;
		}
		for(;t<=K;t++) C[i].skill[t]=C[i-1].skill[t];
	}
}

int main()
{ 
	freopen("balline.in","r",stdin);
	freopen("balline.out","w",stdout);
	init();
	Vec tmpvec;
	int pos,ans=0;
	tmpvec.clear();
	for(int i=1;i<=K-1;i++) 
		tmpvec.push_back(0);
	hash[tmpvec]=1;
	for(int i=1;i<=N;i++)
	{
		tmpvec.clear();
		for(int j=2;j<=K;j++)
			tmpvec.push_back(C[i].skill[j]-C[i].skill[j-1]);
		if(hash[tmpvec]==0) 
			hash[tmpvec]=i+1;
		else 
		{
			pos=hash[tmpvec];
			if(i-pos+1>ans) 
				ans=i-pos+1;
		}
	}
	printf("%d\n",ans);
	return 0;
}