记录编号 349867 评测结果 AAAAAAAAAA
题目名称 军队 最终得分 100
用户昵称 Gravatar最长上升子序列 是否通过 通过
代码语言 C++ 运行时间 0.113 s
提交时间 2016-11-15 12:11:22 内存使用 1.84 MiB
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#define lnt long long
using namespace std;

const int maxn=200000;
int gcd(int a,int b)
{
	if((a%b)==0) return b;
	return gcd(b,(a%b));
}
int n,k;
int ans=0;
int now=1;
int sum[maxn];
int s[maxn];
int qread()
{
	char c=getchar(); int re=0;
	while(c<'0'||c>'9') c=getchar();
   	while(c<='9'&&c>='0') re=re*10+c-'0',c=getchar(); return re;
}

int main()
{
	freopen("tarmy.in","r",stdin);
	freopen("tarmy.out","w",stdout);

	scanf("%d%d",&n,&k);
	s[1]=qread(); sum[1]=s[1]; sum[0]=0;
	if(s[1]>=k) ans=1;
	for(int i=2;i<=n;i++)
	{
		//printf("%d\n",ans);
		s[i]=qread(); bool flag=1; sum[i]=sum[i-1]+s[i];
		int lian=i-now;
		for(int j=i-1;j>=i-now;j--)
		{
			if(gcd(s[i],s[j])!=1)
			{
				lian=j+1;
				break;
			}
		}
		now=i-lian+1;
		if(sum[i]-sum[lian-1]>=k) ans=max(ans,now);
	}
	//printf("%d\n",now);
	printf("%d",ans);

	return 0;
}