题意:在一个序列中找到两个数a和b,使得a*b的因子个数最多,输出最多的因子个数。

思路:数据较多,处理会很慢。对序列中每个数字进行质数分解求因子个数,然后按照因子个数降序排列,对前50个因子最多的数进行暴力求两两之积的因子个数就行了。1s左右就能出结果。低于50的就会WA了。

 #include <bits/stdc++.h>
using namespace std;
int a[];
pair<int,int> pa[];
int getAllFactors(int x, vector<int> &vect) //辅助!
{
for (int j = ; j * j <= x ; ++ j)
{
while (x % j == )
vect.push_back(j) , x /= j;
}
if(x>)
vect.push_back(x);
return vect.size();
} int getFactors(vector<int> &num)
{
vector< vector<int> > all;
all.resize(num.size());
for(int i=; i<num.size(); i++)
getAllFactors( num[i], all[i]); vector<int> tmp;
for(int i=; i<all.size(); i++)
tmp.insert(tmp.end(), all[i].begin(), all[i].end());
sort(tmp.begin(), tmp.end()); int z=;
for (int i = ; i < tmp.size() ; i++)
{
int l = i;
while (l < tmp.size() && tmp[l] ==tmp[i])
++ l;
z *= l - i + ;
i = l - ;
}
return z;
} int factors(int N)
{
if( == N) return ;
int cnt = ;
for (int j = ; j * j <= N ; j++)
{
if (N % j == )
{
cnt++;
if (j * j != N)
cnt++;
}
}
return cnt;
} int main() {
//freopen("input.txt", "r", stdin);
int t;
while(cin>>t)
{
for(int i=; i<t; i++)
{
scanf("%d",&a[i]);
pa[i]=make_pair(factors(a[i]),a[i]);
} sort(pa,pa+t);
reverse(pa,pa+t);
vector<int> tmp;
int n = t>? : t;
int ans=;
for(int i=; i<n; i++)
{
for(int j=i; j<n; j++)
{
tmp.clear();
tmp.push_back(pa[i].second);
tmp.push_back(pa[j].second);
ans=max(getFactors(tmp), ans);
}
}
cout<<ans<<endl;
}
return ;
}

AC代码

最新文章

  1. Android -- 服务组件的使用(1)
  2. sp_executesql
  3. Base64编码解码
  4. [转自51CTO]ITIL与ISO20000的关系
  5. 后序/中序---&gt;前序
  6. 1.C#基础篇--&gt;封装、继承和多态
  7. linux中的配置文件
  8. 自我理解foreach工作原理
  9. SQLSERVER内核架构剖析 (转)
  10. Android的selector 背景选择器
  11. Handler和Message以及Looper之间的三角关系
  12. 睡不着,复习一下C++基础中的基础(深拷贝与浅拷贝)
  13. Boost库安装(实测vs2012)
  14. Bootstrap table 元素列内容超长自动折行显示方法?
  15. js模块化规范
  16. 写论文时,使用word的一些技巧
  17. Android 中的设计模式
  18. mybatis教程之原理剖析
  19. cetnos 7 增加新的硬盘
  20. GridControl 分组排序

热门文章

  1. mvvm 模板中事件没有执行的解决方案
  2. 86标准SQL与92标准SQL用法区别
  3. ubuntu12.04+virtualbox+winxp的关于摄像头无法使用,声音出不来的问题
  4. iframe和window对象的关系
  5. 附近wifi都是你的
  6. 将Opencv java中的Mat通过jni传递到C++中的方法
  7. Apache Shiro知识点总览
  8. 利用URL重写隐藏复杂的URL
  9. ue4 character 物理测试
  10. Unity 5着色器系统代码介绍(下)