【jzoj1965】【递推】【普组模拟赛】马球比赛
题目描述
在解决了马语翻译问题后,马匹数量越来越多,不少乡镇都有了数量可观的马匹,开始出现马球比赛。乡镇之间决定进行马球联赛。
联赛的赛制,主要是比赛双方的马匹数量,成了一个急需解决的问题。首先,所有乡镇都要求,本乡镇所有的马匹都必须参赛,或者都不参赛(若组队的马匹数量不是该镇马匹数量的约数,将无法参赛)。其次,在本乡镇,选出最佳球队,参加乡镇间联赛。
现在,比赛组织方希望满足所有参赛乡镇的要求,并且使得决赛的马匹尽可能多,请你设计每个球队马匹的数量,使得决赛马匹数最大。注意,决赛至少有 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】【递推】【普组模拟赛】马球比赛相关推荐
- 【普组模拟赛】马农(farmer.pas/cpp)
[普组模拟赛]马农(farmer.pas/cpp) 题目描述: 在观看完战马检阅之后,来自大草原的两兄弟决心成为超级"马农",专门饲养战马. 兄弟两回到草原,将可以养马的区域,分为 ...
- 【普组模拟赛】马球比赛(polo.pas/cpp
File IO): input:polo.in output:polo.out 时间限制: 1000 ms 空间限制: 128000 KB 具体限制 Goto ProblemSet 题目描述 在解决了 ...
- 2020.02.07普及C组模拟赛4
普及C组模拟赛4 **1.权势二进制 ** 题目描述 一个十进制整数被叫做权势二进制,当他的十进制表示的时候只由0或1组成.例如0,1,101,110011都是权势二进制而2,12,900不是. 当给 ...
- NOIP2017提高组模拟赛4 (总结)
NOIP2017提高组模拟赛4 (总结) 第一题 约数 设K是一个正整数,设X是K的约数,且X不等于1也不等于K. 加了X后,K的值就变大了,你可以重复上面的步骤.例如K= 4,我们可以用上面的规则产 ...
- 十四届蓝桥青少组模拟赛Python-20221108
十四届蓝桥青少组模拟赛Python-20221108 T1.二进制位数 十进制整数2在十进制中是1位数,在二进制中对应10,是2位数. 十进制整数22在十进制中是2位数,在二进制中对应10110,是5 ...
- 计蒜客信息学3月普及组模拟赛
A. 断幺九 题目链接 分值:100 时间限制:1000ms 测试点数目:10 B. 锈湖 题目链接 分值:100 时间限制:2000ms 测试点数目:10 C. 图 题目链接 分值:100 时间限 ...
- 第一届『Citric杯』NOIP提高组模拟赛 题解
[官方题解]第一届『Citric杯』NOIP提高组模拟赛 题解 第一题 柠檬超市 这题是本次模拟赛的送分题.做法显然. 但是注意此题有一个陷阱: 注意W和C的规模都是10^9,所以如果直接用doubl ...
- 2019 蓝桥杯省赛 B 组模拟赛(一)蒜厂年会
2019 蓝桥杯省赛 B 组模拟赛(一)蒜厂年会 这题有两种情况 1.最大的和是在0~n-1 2.最大的和越过了首尾 这时候只要用n个数的和 - 0~n-1 的连续的最小和 这是求连续子集最大.最小 ...
- DD 摆磁铁(计蒜客信息学8月普及组模拟赛)
DD 摆磁铁 这道题来自 计蒜客信息学8月普及组模拟赛 普及组!! 把我一个TG选手看懵了 看来我要回去打普及了 题目大意 给出一个n个节点的树,要把树上给定的2*m个节点两两配对,两个节点配对的产生 ...
最新文章
- Java异常学习心得
- python中range和xrange的区别_python中range和xrange的区别
- 求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字,例如:2+22+222+2222+22222
- Cenos6.4下远程连接mysql报错1130
- matlab仿真习题,(MATlab仿真部分习题答案.doc
- 数据湖存储格式Hudi原理与实践
- Markdown (H5 ) 降价
- zabbix-3.2 官方手册
- mysql 存储过程案列一个。
- MySQL 报错:Translating SQLException with SQL state '42000', error code '1064', message
- 2019PMP考试专题资料大全
- Vue3项目中使用AE+bodymovin+lottie的模式制作特效
- 表贴电阻尺寸与什么有关_贴片电阻、贴片电容规格、封装、尺寸、功率(转)
- 重启计算机恢复出厂设置,windows7电脑恢复出厂设置的三种方法
- linux 编译cgal,Linux(Ubuntu)安装CGAL
- 线性代数笔记【特征值】
- 进击的开发者!第二期SWTC社区开发者大赛拉开序幕
- 如何解决word中latex公式出现虚线小方框问题
- excel 作图-- 主次纵坐标轴 横坐标名称太长
- 2021年1月编程语言排行榜(C语言又第一名)