zoukankan      html  css  js  c++  java
  • 洛谷 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;
    }
    
  • 相关阅读:
    sparql学习sparql示例、dbpedia在线验证
    中国绿卡
    逾期率的水有多深,你知道吗?
    ICO和区块链区别
    What are the benefits to using anonymous functions instead of named functions for callbacks and parameters in JavaScript event code?
    Link static data in sql source control
    sql data compare
    viewbag
    多态的实际使用
    win10 sedlauncher.exe占用cpu处理
  • 原文地址:https://www.cnblogs.com/fusiwei/p/13973057.html
Copyright © 2011-2022 走看看