#include<cstdio>
int k;
long long N;
int * p;
void input() {
scanf("%d %lld", &k, &N);
p = new int[k];
for (int i = 0; i < k; i++) {
scanf("%d", p + i);
}
}
long long max(long long a, long long b) {
return a > b ? a : b;
}
bool is_in_range(long long current, int multiplier) {
return N / multiplier >= current;
}
long long biggest(long long current, int index) {
if (index == k) {
return current;
}
long long best = max(current, biggest(current, index + 1));
long long tmp = current;
while (is_in_range(tmp, p[index])) {
tmp *= p[index];
best = max(best, biggest(tmp, index + 1));
}
return best;
}
void solve() {
printf("%lld\n", biggest(1, 0));
}
int main(int argc, char ** argv) {
input();
solve();
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | #include<cstdio> int k; long long N; int * p; void input() { scanf("%d %lld", &k, &N); p = new int[k]; for (int i = 0; i < k; i++) { scanf("%d", p + i); } } long long max(long long a, long long b) { return a > b ? a : b; } bool is_in_range(long long current, int multiplier) { return N / multiplier >= current; } long long biggest(long long current, int index) { if (index == k) { return current; } long long best = max(current, biggest(current, index + 1)); long long tmp = current; while (is_in_range(tmp, p[index])) { tmp *= p[index]; best = max(best, biggest(tmp, index + 1)); } return best; } void solve() { printf("%lld\n", biggest(1, 0)); } int main(int argc, char ** argv) { input(); solve(); return 0; } |
English