马球比赛

题目描述

在解决了马语翻译问题后,马匹数量越来越多,不少乡镇都有了数量可观的马匹,开始出现马球比赛。乡镇之间决定进行马球联赛。联赛的赛制,主要是比赛双方的马匹数量,成了一个急需解决的问题。首先,所有乡镇都要求,本乡镇所有的马匹都必须参赛,或者都不参赛(若组队的马匹数量不是该镇马匹数量的约数,将无法参赛)。其次,在本乡镇,选出最佳球队,参加乡镇间联赛。现在,比赛组织方希望满足所有参赛乡镇的要求,并且使得决赛的马匹尽可能多,请你设计每个球队马匹的数量,使得决赛马匹数最大。注意,决赛至少有 2 个队伍晋级。

输入

第一行一个整数 N,表示想要报名参赛的乡镇。
接下来 N 个用空格分开的整数 a(i),表示第 i 个乡镇报名参赛的马匹数。

输出

计算出决赛最大参与的马匹数。

样例输入

输入样例 1

3 1 3 6

输入样例 2

5 4 6 3 8 9

样例输出

输出样例 1

6

样例解释

每个队伍 3 匹马,乡镇 1 无法参赛。乡镇 2 和 3 都可以进行比赛,决赛 2 个队伍,共 6匹马。

输出样例 2

9

样例解释

每个队伍 3 匹马,乡镇 2,3,5 可以参赛。决赛 3 个队伍, 9 匹马。

数据范围限制

20%的数据 2<=N<=100, 1<=a(i)<=10000。
50%的数据 2<=N<=20000。
100%的数据 2<=N<=200000, 1<=a(i)<= 2000000。

思路:

卡常+伪DP

代码:

var
        f,p:array[0..2000001]of int64;
        n,i,j,k,x,y,z,ls:longint;
        s:int64;
begin
        assign(input,'polo.in');
        reset(input);
        assign(output,'polo.out');
        rewrite(output);
        read(n);
        for i:=1 to n do
        begin
                read(x);
                inc(f[x]);
                if x>z then z:=x;
        end;
        s:=n;
        for i:=2 to z do
        if f[i]>0 then
        begin
                for j:=2 to trunc(sqrt(i)) do
                begin
                        if p[j]>=2 then continue;
                        inc(p[j]);
                        if i mod j=0 then
                        begin
                                inc(f[j],f[i]);
                                if j*j<>i then inc(f[i div j],f[i]);
                        end;
                end;
        end;
        for i:=1 to z do
        if (f[i]>1)and(f[i]*i>s) then s:=f[i]*i;
        writeln(s);
end.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值