题目描述

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


解题思路

题目大意:求出max的公约数*队伍数(队伍马匹是这个公约数的倍数)

设 f [ i ] f[i] f[i]是有 f [ i ] f[i] f[i]个队伍是 i i i的倍数

  • f [ j ] = f [ i ] + f [ j ] ( i f[j]=f[i]+f[j](i f[j]=f[i]+f[j](i是 j j j的倍数 ) ) )
    队伍数是 i i i的倍数,那么也一定是 j j j的倍数
  • f [ i / j ] = f [ i ] + f [ i / j ] ( i f[i/j]=f[i]+f[i/j](i f[i/j]=f[i]+f[i/j](i是 j j j的倍数 ) ( i / j < > j ) )(i/j<>j) )(i/j<>j)
    与上一点同理

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
long long n,x,f[2000200],maxn,maxx;//记得开long long
int main(){//  freopen("polo.in","r",stdin);
//  freopen("polo.out","w",stdout);scanf("%lld",&n);for(int i=1;i<=n;i++){scanf("%lld",&x);if(x>maxn)maxn=x;++f[x];}for(int i=2;i<=maxn;i++)         if(f[i])//如果i有可能是答案for(int j=1;j*j<=i;j++){ //这两个循环要优化if(i%j==0){f[j]+=f[i];//第一点if(i/j!=i && j * j < i)f[i/j]+=f[i];//第二点}}for(int i=1;i<=maxn;i++)if(f[i]>=2&&f[i]*i>maxx)//如果两个队伍满足maxx=f[i]*i;//求一个最大的printf("%lld",maxx);
}

【jzoj1965】【递推】【普组模拟赛】马球比赛相关推荐

  1. 【普组模拟赛】马农(farmer.pas/cpp)

    [普组模拟赛]马农(farmer.pas/cpp) 题目描述: 在观看完战马检阅之后,来自大草原的两兄弟决心成为超级"马农",专门饲养战马. 兄弟两回到草原,将可以养马的区域,分为 ...

  2. 【普组模拟赛】马球比赛(polo.pas/cpp

    File IO): input:polo.in output:polo.out 时间限制: 1000 ms 空间限制: 128000 KB 具体限制 Goto ProblemSet 题目描述 在解决了 ...

  3. 2020.02.07普及C组模拟赛4

    普及C组模拟赛4 **1.权势二进制 ** 题目描述 一个十进制整数被叫做权势二进制,当他的十进制表示的时候只由0或1组成.例如0,1,101,110011都是权势二进制而2,12,900不是. 当给 ...

  4. NOIP2017提高组模拟赛4 (总结)

    NOIP2017提高组模拟赛4 (总结) 第一题 约数 设K是一个正整数,设X是K的约数,且X不等于1也不等于K. 加了X后,K的值就变大了,你可以重复上面的步骤.例如K= 4,我们可以用上面的规则产 ...

  5. 十四届蓝桥青少组模拟赛Python-20221108

    十四届蓝桥青少组模拟赛Python-20221108 T1.二进制位数 十进制整数2在十进制中是1位数,在二进制中对应10,是2位数. 十进制整数22在十进制中是2位数,在二进制中对应10110,是5 ...

  6. 计蒜客信息学3月普及组模拟赛

    A. 断幺九 题目链接 分值:100 时间限制:1000ms 测试点数目:10 B. 锈湖 题目链接 分值:100 时间限制:2000ms 测试点数目:10 C. 图  题目链接 分值:100 时间限 ...

  7. 第一届『Citric杯』NOIP提高组模拟赛 题解

    [官方题解]第一届『Citric杯』NOIP提高组模拟赛 题解 第一题 柠檬超市 这题是本次模拟赛的送分题.做法显然. 但是注意此题有一个陷阱: 注意W和C的规模都是10^9,所以如果直接用doubl ...

  8. 2019 蓝桥杯省赛 B 组模拟赛(一)蒜厂年会

    2019 蓝桥杯省赛 B 组模拟赛(一)蒜厂年会 这题有两种情况 1.最大的和是在0~n-1 2.最大的和越过了首尾 这时候只要用n个数的和 - 0~n-1 的连续的最小和 这是求连续子集最大.最小 ...

  9. DD 摆磁铁(计蒜客信息学8月普及组模拟赛)

    DD 摆磁铁 这道题来自 计蒜客信息学8月普及组模拟赛 普及组!! 把我一个TG选手看懵了 看来我要回去打普及了 题目大意 给出一个n个节点的树,要把树上给定的2*m个节点两两配对,两个节点配对的产生 ...

最新文章

  1. Java异常学习心得
  2. python中range和xrange的区别_python中range和xrange的区别
  3. 求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字,例如:2+22+222+2222+22222
  4. Cenos6.4下远程连接mysql报错1130
  5. matlab仿真习题,(MATlab仿真部分习题答案.doc
  6. 数据湖存储格式Hudi原理与实践
  7. Markdown (H5 ) 降价
  8. zabbix-3.2 官方手册
  9. mysql 存储过程案列一个。
  10. MySQL 报错:Translating SQLException with SQL state '42000', error code '1064', message
  11. 2019PMP考试专题资料大全
  12. Vue3项目中使用AE+bodymovin+lottie的模式制作特效
  13. 表贴电阻尺寸与什么有关_贴片电阻、贴片电容规格、封装、尺寸、功率(转)
  14. 重启计算机恢复出厂设置,windows7电脑恢复出厂设置的三种方法
  15. linux 编译cgal,Linux(Ubuntu)安装CGAL
  16. 线性代数笔记【特征值】
  17. 进击的开发者!第二期SWTC社区开发者大赛拉开序幕
  18. 如何解决word中latex公式出现虚线小方框问题
  19. excel 作图-- 主次纵坐标轴 横坐标名称太长
  20. 2021年1月编程语言排行榜(C语言又第一名)

热门文章

  1. 2021年煤矿安全监测监控新版试题及煤矿安全监测监控
  2. chatbot_Chatbot开发简介
  3. 面向政府治理大数据的高性能计算系统
  4. 浅谈Wi-Fi渗透--原理篇
  5. Java程序员面试需要注意什么?
  6. 晶振原理详解及测试方法
  7. python笔迹识别_CVPR 2019笔迹识别论文:逆鉴别网络+八路Attention
  8. 计算机的用户账户,电脑用户名_电脑用户名是什么
  9. JavaScript 各种参数 详解
  10. 【书单】100部世界名著