#1165 : 益智游戏
2015-09-12 13:54
288 查看
描述
幽香今天心情不错,正在和花田里的虫子玩一个益智游戏。这个游戏是这样的,对于一个数组A,幽香从A中选择一个数a,虫子从A中选择一个数b。a和b可以相同。她们的分数是a*b的因子的个数。
幽香和虫子当然想要获得尽可能的高的分数,你能告诉她们应该选择哪两个数吗。
由于幽香是个非常随意的人,数组A中的元素都是她随机选择的。
输入
一行一个数n,表示A中整数的数量。接下来一行n个数,分别表示a1,a2,...,an,为A中的元素。
n <= 100000, 1 <= ai <= 100000
保证所有的ai都是随机生成的。
输出
一行表示最大的分数。样例输入
2 3 4
样例输出
6
EmacsNormalVim
真是益智游戏,看了题解才知道“随机选择”是什么意思。
#include<cstdio> #include<cctype> #include<queue> #include<cmath> #include<cstring> #include<algorithm> #define rep(i,s,t) for(int i=s;i<=t;i++) #define dwn(i,s,t) for(int i=s;i>=t;i--) #define ren for(int i=first[x];i!=-1;i=next[i]) using namespace std; inline int read() { int x=0,f=1;char c=getchar(); for(;!isdigit(c);c=getchar()) if(c=='-') f=-1; for(;isdigit(c);c=getchar()) x=x*10+c-'0'; return x*f; } typedef long long ll; const int maxn=100010; ll cal(ll a) { ll res=1; for(ll i=2;i*i<=a;i++) if(a%i==0) { int cnt=1; while(a%i==0) a/=i,cnt++; res*=cnt; } if(a>1) res<<=1; return res; } ll A[maxn],B[maxn],ans; int od[maxn]; int cmp(int x,int y) {return B[x]>B[y];} int main() { int n=read(); rep(i,1,n) A[i]=read(),B[i]=cal(A[i]),od[i]=i; sort(od+1,od+n+1,cmp); n=min(n,1000); rep(i,1,n) rep(j,i,n) if((ll)B[od[i]]*B[od[j]]>=ans) ans=max(ans,cal(A[od[i]]*A[od[j]])); printf("%lld\n",ans); return 0; }
View Code
相关文章推荐
- C++中栈区 堆区 常量区
- igrimaceV8.0.0 IG 一键新机 陌陌 Uber优步打针 平安易贷 滴滴 一号专车 饿了么 ios8 V8 ZTN(插件安装方式)
- 函数指针
- Linux下MySql忘记 root密码的解决办法
- leetcode 刷道题 70 earch Insert Position 二进制搜索插入位置
- 2015年9月12日模拟赛总结
- EJB杂项
- State模式及与Strategy/Commmand/Chain of Resposibility区别
- Android Notification (转)
- 你见过最好的幼儿园
- (二)我的JavaScript系列:JavaScript面向对象旅程(下)
- 网页布局基础
- 浅谈.net remoting 与webservice
- iOS 裁剪图片
- C/C++常用头文件及函数汇总
- 第二周项目三—体验复杂度(2)
- Tian Ji -- The Horse Racing 2287 (好题 数学逻辑)
- 浅谈Android的三种数据持久化技术之文件存储
- 网络电视精灵2
- #1164 : 随机斐波那契