比赛 |
20161115 |
评测结果 |
AAAAAWWWWW |
题目名称 |
军队 |
最终得分 |
50 |
用户昵称 |
jinqiu |
运行时间 |
0.376 s |
代码语言 |
C++ |
内存使用 |
65.55 MiB |
提交时间 |
2016-11-15 11:18:55 |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
const int maxn = 1e5 + 10;
const int prime[170] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997};
int n, m ,ans;
int a[maxn];
int factor[maxn][170];
bool judge[1000];
int read();
void work();
void get_factor();
int main() {
freopen("tarmy.in", "r", stdin);
freopen("tarmy.out", "w", stdout);
int i, j;
n = read(); m = read();
for(i = 1; i <= n; i++)
a[i] = read();
get_factor();
work();
cout << ans << "\n";
return 0;
}
void work() {
int i, j, k;
for(i = 1; i <= n; i++) {
memset(judge, false, sizeof(judge));
for(k = 1; k <= factor[i][0]; k++)
judge[factor[i][k]] = true;
int tmp = 1;
long long sum = a[i];
for(j = i + 1; j <= n; j++) {
bool flag = true;
for(k = 1; k <= factor[j][0]; k++) {
if(!judge[factor[j][k]])
judge[factor[j][k]] = true;
else {
flag = false;
break;
}
}
if(flag) {
tmp++;
sum += a[j];
}
else {
if(sum >= m && tmp >= ans)
ans = tmp;
break;
}
}
}
}
void get_factor() {
int i, j;
bool judge[1010];
for(i = 1; i <= n; i++) {
j = 0;
int tmp = (int)((double)sqrt(a[i] + 1));
int now = a[i];
while(prime[j] <= tmp) {
if(now % prime[j] == 0){
factor[i][++factor[i][0]] = prime[j];
while(now % prime[j] == 0)
now /= prime[j];
}
j++;
}
if(now != 1)
factor[i][++factor[i][0]] = now;
}
}
int read() {
char s = getchar();
int t = 0, f = 1;
while(s < '0' || s > '9') {
if(s == '-')f = -1;
s = getchar();
}
while(s >= '0' && s <= '9') {
t = (t << 3) + (t << 1) + s - '0';
s = getchar();
}
return t*f;
}