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