zoukankan      html  css  js  c++  java
  • #1165 : 益智游戏

    描述

    幽香今天心情不错,正在和花田里的虫子玩一个益智游戏。
    这个游戏是这样的,对于一个数组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
     
    真是益智游戏,看了题解才知道“随机选择”是什么意思。
     
    #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
    ",ans);
        return 0;
    }
    View Code
     
  • 相关阅读:
    C#文件操作
    WPF 工具提示(ToolTip)
    C#中is 和 as 操作符
    C#线程同步——lock,Monitor,Mutex(摘录)
    随记
    实现RichTextBox内容自动滚动(WPF)
    初探MVC3(一)
    thinkPad系列的笔记本质量已经大不如以前了,太令人失望了
    WPF—— ComboBox绑定应用
    new,virtual,override,interface,delegate,eventC#——方法实现总结
  • 原文地址:https://www.cnblogs.com/wzj-is-a-juruo/p/4802925.html
Copyright © 2011-2022 走看看