比赛 |
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);
}