比赛 20161115 评测结果 EAATTTTTTT
题目名称 军队 最终得分 20
用户昵称 srO cwm Orz 运行时间 7.014 s
代码语言 C++ 内存使用 151.39 MiB
提交时间 2016-11-15 11:54:13
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
#define debug(x) cout << #x << ":" << x << '\n';
const int maxn = 7000;
int s[maxn];
int n,k;
int isgcd[maxn][maxn];
int ans = -1;

int gcd(int a,int b){return b==0 ? a:gcd(b, a%b);}
/*bool JJudge(int l,int r){
	int flag1(1),flag2(1);
	for(int j = l; j < r; j++)
		for(int k = l; k < r; k++)
			if(k != j)
				if(isgcd[j][k] != 1)flag1=0;
	int sum(0);
	for(int i = l; i < r; i++)sum += s[i];
	if(sum < k)flag2=0;
	return flag1&&flag2;
}
bool Judge(int x){
	int flag(0);
	for(int i = 0; i <= n-x; i++){
		int l(i),r(i+x);//[l,r)
		if(JJudge(l,r)){
		//	debug(l); debug(r);
			flag = 1;
		//	for(int j = l; j < r; j++){debug(j);debug(s[j]);}
		//	puts("");
		}
	}
	return flag;
}*/
bool JJudge(int l,int r){
	int flag(1),fflag(1);

	for(int i = l; i <= r; i++)
		for(int j = l; j <= r; j++)
			if(i!=j)
				if(isgcd[i][j] != 1)flag = 0;
		
	int sum(0);
	for(int i = l; i <= r; i++) sum += s[i];
	if(sum < k) fflag = 0;

	return fflag && flag;
}
bool Judge(int x){
//	int flag=0;
	for(int i = 0; i <= n-x; i++){
		int l = i, r = i+x-1;
		if(JJudge(l,r)){
			return 1;
		/*	flag = 1;
			ans = max(ans,r-l+1);
			*/
		/*	puts("");
			for(int j = l; j <= r; j++)
				printf("%d ",s[j]);
			puts("");
		*/	
		}
	}
//	return flag;
	return 0;
}
int main()
{
	#ifndef DEBUG
		string Filename="tarmy";
		freopen((Filename+".in").c_str(),"r",stdin);
		freopen((Filename+".out").c_str(),"w",stdout);
	#endif
	scanf("%d%d",&n,&k);
	for(int i = 0; i < n; i++)scanf("%d",&s[i]);
	for(int i = 0; i < n; i++){
		for(int j = 0; j < n; j++){
			isgcd[i][j] = gcd(s[i],s[j]);
		//	printf("gcd(s[i],s[j])=%d",gcd(s[i],s[j]));
		//	printf("isgcd[%d][%d]=%d,s[%d]=%d,s[%d]=%d\n",i,j,isgcd[i][j],i,s[i],j,s[j]);
		}
	}
/*	int L(0), R(n),M;
	while(L < R){
		M = (L+R)>>1;
		if(Judge(M)) L = M;
		else R = M-1;
	}*/
	for(int i = n; i >= 0; i--)
		if(Judge(i)){
			printf("%d",i);
			return 0;
		}
	puts("0");	
//	printf("%d",ans);
}