比赛 |
20161115 |
评测结果 |
AWWWWWWWWW |
题目名称 |
军队 |
最终得分 |
10 |
用户昵称 |
Ostmbh |
运行时间 |
0.044 s |
代码语言 |
C++ |
内存使用 |
1.46 MiB |
提交时间 |
2016-11-15 11:55:57 |
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
long long s[100010]={0};
int A[100010]={0};
struct BIG{
int C[50];
int len;
BIG(){
memset(C,0,sizeof(C));
len=0;
};
bool operator > (const BIG& c) const {
if(len!=c.len)
return len>c.len;
for(int i=len;i>=1;i--)
if(C[i]!=c.C[i])
return C[i]>c.C[i];
return false;
}
BIG operator * (const BIG& b) const {
BIG c;
int x;
for(int i=1;i<=len;i++){
x=0;
for(int j=1;j<=b.len;j++){
c.C[i+j-1]+=b.C[j]*C[i]+x;
x=c.C[i+j-1]/10;
c.C[i+j-1]%=10;
}
c.C[i+b.len]=x;
}
c.len=40;
while(c.C[c.len]==0&&c.len>1)
c.len--;
return c;
}
BIG operator /(const int& b)const{
BIG c;
c.len=40;
long long d=0;
for(int i=len;i>=1;i--){
d=d*10+C[i];
c.C[i]=d/b;
d%=b;
}
while(c.C[c.len]==0&&c.len>1)
c.len--;
return c;
}
int operator %(const int& b)const{
long long n=0;
for(int i=len;i>=1;i--){
n=n*10+C[i];
n%=b;
}
return n;
}
};
BIG tran(int b){
BIG c;
int i=1;
while(b>0){
c.C[i++]=b%10;
b/=10;
}
c.len=i-1;
return c;
}
inline void read(int &x){
x=0;
char c=getchar();
bool flag=0;
while(c<'0'||c>'9'){
if(c=='-')
flag=1;
c=getchar();
}
while(c>='0'&&c<='9'){
x=x*10+c-'0';
c=getchar();
}
if(flag)
x=-x;
}
BIG zero=tran(0);
BIG one=tran(1);
inline int gcd(int a,int b){
if(!b)
return a;
return gcd(b,a%b);
}
BIG sum=one;
inline int ggcd(BIG x,int c){
int cls=x%c;
if(cls==0)
return c;
else return gcd(c,cls);
}
int main(){
freopen("tarmy.in","r",stdin);
freopen("tarmy.out","w",stdout);
int n,k;
int ans=0;
read(n),read(k);
for(int i=1;i<=n;i++){
read(A[i]);
s[i]=s[i-1]+A[i];
}
int l=1,r=1;
sum=sum*tran(A[1]);
for(;r>=l;){
if(r!=n)
while(ggcd(sum,A[r+1])==1&&s[r]-s[l-1]<k){
r++;
sum=sum*tran(A[r]);
if(r==n)
break ;
}
if(r-l+1>ans&&s[r]-s[l-1]>=k)
ans=r-l+1;
if(r!=n)
while(ggcd(sum,A[r+1])==1){
if(r-l+1>ans&&s[r]-s[l-1]>=k)
ans=r-l+1;
r++;
sum=sum*tran(A[r]);
if(r==n)
break;
}
if(r-l+1>ans&&s[r]-s[l-1]>=k)
ans=r-l+1;
l++;
sum=sum/A[l-1];
}
printf("%d\n",ans);
return 0;
}