题目传送门

又是毕业季

题目背景

“叮铃铃铃”,随着高考最后一科结考铃声的敲响,三年青春时光顿时凝固于此刻。毕业的欣喜怎敌那离别的不舍,憧憬着未来仍毋忘逝去的歌。1000多个日夜的欢笑和泪水,全凝聚在毕业晚会上,相信,这一定是一生最难忘的时刻!

题目描述

彩排了一次,老师不太满意。当然啦,取每位同学的号数来找最大公约数显然不太合理。于是老师给每位同学评了一个能力值。于是现在问题变为,从n个学生中挑出k个人使得他们的默契程度(即能力值的最大公约数)最大。但因为节目太多了,而且每个节目需要的人数又不知道。老师想要知道所有情况下能达到的最大默契程度是多少。这下子更麻烦了,还是交给你吧~

PS:一个数的最大公约数即本身。

输入输出格式

输入格式:

第一行一个正整数n。

第二行为n个空格隔开的正整数,表示每个学生的能力值。

输出格式:

总共n行,第i行为k=i情况下的最大默契程度。

输入输出样例

输入样例#1: 复制

4
1 2 3 4
输出样例#1: 复制

4
2
1
1

说明

【题目来源】

lzn原创

【数据范围】

记输入数据中能力值的最大值为inf。

对于20%的数据,n<=5,inf<=1000

对于另30%的数据,n<=100,inf<=10

对于100%的数据,n<=10000,inf<=1e6


  分析:

  看到这题首先想到的当然还是gcd,但是思考过后发现直接gcd根本不可做。

  实际上这题根本不需要用到gcd,对于给出的每一个数,直接找出它的所有因数,用一个桶来记录每一个因数出现过多少次,如果一个因数出现x次,那么1-x个人的默契值就可以是这个数,枚举找到最大的答案即可。不理解可以看代码。

  Code:

#include<bits/stdc++.h>
using namespace std;
int n,a[],ans[];
int f[],maxx=;
inline void go(int x)
{
for(int i=;i*i<=x;i++)
if(x%i==){f[i]++;
if(i*i!=x)f[x/i]++;
maxx=max(maxx,max(i,x/i));}
}
int main()
{
ios::sync_with_stdio(false);
cin>>n;
for(int i=;i<=n;i++){
cin>>a[i];go(a[i]);}
for(int i=;i<=maxx;i++){
if(f[i])ans[f[i]]=max(ans[f[i]],i);}
for(int i=n;i>=;i--)
ans[i]=max(ans[i],ans[i+]);
for(int i=;i<=n;i++){
printf("%d\n",ans[i]);}
return ;
}

最新文章

  1. c# 通过反射调用类的构造函数
  2. [转]VS2010中如何创建一个WCF
  3. HTML5 本地存储 LocalStorage
  4. (六) 6.3 Neurons Networks Gradient Checking
  5. hdu 4739 状压DP
  6. JVM中可生成的最大Thread数量
  7. java 导出excel(简单案例)
  8. PHP控制反转(IOC)和依赖注入(DI)
  9. spring的MVC执行原理
  10. MMORPG中的相机跟随算法
  11. Spring Boot 定时任务的使用
  12. VUE中 style scoped 修改原有样式
  13. Linux下redis 的部署、主从与集群
  14. Linux中使用sed命令或awk命令修改常规配置文件
  15. 检查本机显卡的cuda信息及适配cuda-sdk版本
  16. UVa 714 Copying Books - 二分答案
  17. List集合的子类ArrayList和LinkedList
  18. SQL 上线平台(内含全部完整资料)
  19. C++ 内存分配(new,operator new)详解
  20. 令自己的本地ip可以被外网访问

热门文章

  1. Tomcat 映射虚拟目录和程序热部署
  2. java主线程捕获子线程中的异常
  3. [USACO Mar08] 牛跑步
  4. 洛谷2115 [USACO14MAR]破坏Sabotage
  5. Why to Not Not Start a Startup
  6. Spring的使用优点
  7. 如何用js自己实现Animate运动函数
  8. new操作符的内部运行解析
  9. 主成分分析(PCA)及其在R里的实现
  10. perl登录ssh