比赛 20161115 评测结果 AAAAATTTTT
题目名称 军队 最终得分 50
用户昵称 祖国栋梁 运行时间 5.021 s
代码语言 C++ 内存使用 2.60 MiB
提交时间 2016-11-15 10:27:31
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<algorithm>
const int maxn=100010;
typedef long long ll;
using namespace std;
ll a[maxn],s[maxn],sum[maxn];
ll gcd(ll a,ll b)
{
	if(b==0) return a;
	return gcd(b,a%b);
}
int main()
{
	freopen("tarmy.in","r",stdin);
	freopen("tarmy.out","w",stdout);
	ll n,l,ans=-1;
	cin>>n>>l;
	for(int i=1;i<=n;i++)
		scanf("%lld",&a[i]);
	s[1]=1;sum[0]=0;
	for(int i=1;i<=n;i++)
		for(int j=i-1;j>=1;j--)
		{
			s[i]=j;
			if(gcd(a[i],a[j])!=1)
			{	
				s[i]++;
				break;
			}
		}
	for(int i=1;i<=n;i++)
		sum[i]=sum[i-1]+a[i];
	for(int i=1;i<=n;i++)
	{
		ll cnt=0,r=i,j=s[i];
		while(1)
		{
			if(r==j)
				break;
			if(r>j)
				r--;
			j=max(s[r],j);
		}
		if(sum[i]-sum[j-1]>=l)
			ans=max(i-j+1,ans);	
	}
	cout<<ans;
	return 0;
}