• 洛谷 P1414 又是毕业季II


    洛谷 P1414 又是毕业季II

    洛谷传送门

    题目背景

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

    题目描述

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

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

    输入格式

    第一行一个正整数n。

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

    输出格式

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


    题解:

    2020.11.14模拟赛T1 100分场。

    感觉这样的难度放到T1还是比较合理的。

    但是还是想了挺长时间,窝太菜了。

    代码:

    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    const int maxn=10010;
    const int maxm=1e6+6;
    int n,maxx,last;
    int a[maxn],cnt[maxm],mp[maxn];
    void fac(int x)
    {
    	for(int i=1;i<=sqrt(x);i++)
    		if(x%i==0)
    		{
    			cnt[i]++,cnt[x/i]++;
    			if(i==x/i)
    				cnt[i]--;
    		}
    }
    int main()
    {
    	scanf("%d",&n);
    	for(int i=1;i<=n;i++)
    	{
    		scanf("%d",&a[i]);
    		fac(a[i]);
    		maxx=max(maxx,a[i]);
    	}
    	for(int i=1;i<=maxx;i++)
    		if(cnt[i])
    			mp[cnt[i]]=max(mp[cnt[i]],i);
    	for(int i=n;i>=1;i--)
    		if(mp[i]<mp[last])
    			mp[i]=mp[last];
    		else
    			last=i;
    	for(int i=1;i<=n;i++)
    		printf("%d
    ",mp[i]);
    	return 0;
    }
    
  • 相关阅读:
    Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN'.
    Qt 下快速读写Excel指南(尘中远)
    QT 那些事
    安卓环境下,通过QT调用jar包
    android使用C/C++调用SO库
    雷军曾定下目标,2017年将聚焦5大核心战略,分别是:黑科技、新零售、国际化、人工智能和互联网金融五大部分
    Maven和Gradle
    链接生成接口
    孤儿进程和僵尸进程
    Case when 的使用方法
  • 原文地址:https://www.cnblogs.com/fusiwei/p/13973057.html
Copyright © 2020-2023  润新知