本题我采用了 dfs 的方法来书写但是会 T 第一个点,本机上跑了 16 秒。
Code:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int INF=2000000000;
int n,k,num[101],lon,ans;
set<int>a;
bool cmp(int x,int y){
return x>y;
}
void dfs(int dep,int now){
if(dep==n){
if(now!=1){
if(a.size()<k)
a.insert(now);
else{
if(now<*(--a.end())){
a.insert(now);
a.erase(--a.end());
}
}
}
return ;
}
dep++;
for(int i=now;i<=INF;i*=num[dep])
dfs(dep,i);
}
signed main(){
cin>>n>>k;
for(int i=1;i<=n;i++)
cin>>num[i];
sort(num+1,num+1+n);
dfs(0,1);
cout<<*(--a.end())<<endl;
return 0;
}
但是在将排序方式变为从大到小时,通过第一个点的时间为 700ms。
在将排序方式改变后,搜索的数字的总量是不会改变的(是吧),而且在将原做法的 set 操作去掉后原做法依然会跑到 11 秒,请教一下各位大佬为什么