#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int n;
const long long maks=9223372036854775807;
long long k,x,wynik;
vector<long long>v;
void baktrak(long long w,int poz){
for(int i=poz;i<v.size();++i){
if(w>maks/v[i]||w*v[i]>k)continue;
baktrak(w*v[i],i+1);
}
wynik=max(wynik,w);
}
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cin>>n>>k;
for(int i=0;i<n;++i){
cin>>x;
v.push_back(x);
while(x<=1000000000){
x*=x;
v.push_back(x);
}
}
sort(v.begin(),v.end());
for(int i=0;i<v.size();++i){
if(v[i]>k){
v.resize(i);
break;
}
}
reverse(v.begin(),v.end());
baktrak(1,0);
cout<<wynik;
}
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 | #include<iostream> #include<vector> #include<algorithm> using namespace std; int n; const long long maks=9223372036854775807; long long k,x,wynik; vector<long long>v; void baktrak(long long w,int poz){ for(int i=poz;i<v.size();++i){ if(w>maks/v[i]||w*v[i]>k)continue; baktrak(w*v[i],i+1); } wynik=max(wynik,w); } int main(){ ios::sync_with_stdio(false); cin.tie(NULL); cin>>n>>k; for(int i=0;i<n;++i){ cin>>x; v.push_back(x); while(x<=1000000000){ x*=x; v.push_back(x); } } sort(v.begin(),v.end()); for(int i=0;i<v.size();++i){ if(v[i]>k){ v.resize(i); break; } } reverse(v.begin(),v.end()); baktrak(1,0); cout<<wynik; } |
English