NC22938. 丑数
描述
输入描述
第 1 行:二个被空间分开的整数:K 和 N ,1<= K<=100 , 1<= N<=100,000.
第 2 行: K个被空间分开的整数:集合S的元素
输出描述
单独的一行,写上对于输入的S的第N个丑数。
示例1
输入:
4 19 2 3 5 7
输出:
27
C++(g++ 7.5.0) 解法, 执行用时: 22ms, 内存消耗: 1156K, 提交时间: 2022-11-20 19:41:20
#include<bits/stdc++.h> using namespace std; #define int long long const int N=1e5+100; int a[N]; int b[N],num[N]; signed main() { int k,n; cin>>k>>n; for(int i=1;i<=k;i++) cin>>a[i]; num[0]=1; int ans,last=1; for(int i=1;i<=n;i++) { ans=2e9; for(int j=1;j<=k;j++) { while(a[j]*num[ b[j] ]<=last) b[j]++; ans=min(ans,a[j]*num[ b[j] ]); } last=ans; num[i]=ans; } cout<<ans<<endl; return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 39ms, 内存消耗: 760K, 提交时间: 2019-08-25 19:25:26
#include<bits/stdc++.h> using namespace std; int a[110],b[110],hum[1000010]; int main(){ int n,m,dmin; cin>>n>>m; for(int i=1;i<=n;i++) cin>>a[i]; int las=1; hum[0]=1; for(int i=1;i<=m;i++){ dmin=2e9; for(int j=1;j<=n;j++){ while(a[j]*hum[b[j]]<=las) b[j]++; dmin=min(dmin,a[j]*hum[b[j]]); } las=dmin; hum[i]=las; } cout<<dmin<<"\n"; return 0; }