#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; } |