入门题解 | 欢乐赛#33题解T4
2024-11-11 20:55:17
发布于:上海
35阅读
0回复
0点赞
给全题解点个赞吧
(关于这题用了我7遍提交记录这件事,注意平方优化)
先算出数组中各数的因子数量,再对因子数量进行排序,从大到小相加直到
大于等于m,输出数量即可。
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
bool cmp(int a,int b){
return a>b;
}
int main(){
int n,m,a[100005];
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
int sum=0;
for(int j=1;j*j<=a[i];j++){
if(a[i]%j==0)sum+=2;
if(j*j==a[i]) sum--;
}
a[i]=sum;
}
sort(a+1,a+n+1,cmp);
int sum=0;
for(int i=1;i<=n;i++){
sum+=a[i];
if(sum>=m) {cout<<i;return 0;}
}
return 0;
}
这里空空如也
有帮助,赞一个