- 我又回来啦……
- 被排水系统虐了两天终于过了,
但是不想写题解( __int128真是好用- 回到正题。
过来水个题解 - 题干(洛谷)
- 我们再看一遍题,自己推一遍样例试一试(如图)
- 在推的过程中能够发现:每一个数都是数组前面的数乘上某一个质因数获得的。
- 思路get√
- 上代码。
- 注意小细节,s数组存储当前质因数乘上的数的位置,下一次从这里开始找,否则会超时。由于a数组单调递增,只需要增大s即可。
#include<bits/stdc++.h>
using namespace std;
int k,n;
long long p[110],s[110],a[100010];
int main()
{
scanf("%d%d",&k,&n);
for(int i=1;i<=k;i++)
scanf("%d",&p[i]);
a[0]=1;
for(int i=1;i<=n;i++){
a[i]=0x7fffffff;
int f;
for(int j=1;j<=k;j++){
while(p[j]*a[s[j]]<=a[i-1])
s[j]++;
if(a[i]>p[j]*a[s[j]])
a[i]=p[j]*a[s[j]];
}
}
printf("%d\n",a[n]);
return 0;
}