比赛 20120711 评测结果 AAAAAAAATTTT
题目名称 平衡奶牛 最终得分 66
用户昵称 Citron酱 运行时间 4.341 s
代码语言 C++ 内存使用 0.67 MiB
提交时间 2012-07-11 10:58:13
显示代码纯文本
#include <cstdio>

#define I_F "balline.in"
#define O_F "balline.out"

const long MAXn=100000;
const short MAXk=30;

long n;
short k;
long s[MAXn];
long ans=0;

void Input();
void Decode(const long&, long*);
void Add(long*, const long*);
bool Ok(const long*);
inline long Max(const long&, const long&);
void Search();
void Output();

int main()
{
	Input();
	Search();
	Output();
	return 0;
}

void Input()
{
	freopen(I_F,"r",stdin);
	scanf("%ld%hd",&n,&k);
	for (long i=0; i<n; ++i)
		scanf("%ld",&s[i]);
}

void Decode(const long &x, long *s)
{
	long t=x;
	for (short i=0; i<k; ++i)
	{
		s[i]=t%2;
		t/=2;
	}
}

void Add(long *a, const long *b)
{
	for (short i=0; i<k; ++i)
		a[i]+=b[i];
}

bool Ok(const long *s)
{
	for (short i=1; i<k; ++i)
		if (s[i-1]!=s[i])
			return false;
	return true;
}

inline long Max(const long &a, const long &b)
{
	return (a>b)?a:b;
}

void Search()
{
	long now[MAXk], t[MAXk];
	for (long i=0; i<n; ++i)
	{
		Decode(s[i],now);
		if (Ok(now))
			ans=Max(ans,1);
		for (long j=1; j<=i; ++j)
		{
			Decode(s[i-j],t);
			Add(now,t);
			if (Ok(now))
				ans=Max(ans,j+1);
		}
	}
}

void Output()
{
	freopen(O_F,"w",stdout);
	printf("%ld\n",ans);
}