• 洛谷1414 又是毕业季II


    问题描述

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

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

    输入格式:

    第一行一个正整数n。

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

    输出格式:

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

    数论题,感觉智商不够用了啊。。。看起来很简单的题想了很长时间啊。

    给出一个数列,求出在里面找出i个数字的最大公约数。

    找出每个数倍数的个数,然后取c[1...n]的最大值,就是取出i个数的最大公约数。

     1 //又是毕业季II 
     2 #include<bits/stdc++.h>
     3 using namespace std;
     4 int a[1000005],c[100005];
     5 int n,k;
     6 int main(){
     7     scanf("%d",&n);
     8     int cnt=0;
     9     int len=0;
    10     for(int i=1;i<=n;i++){
    11         scanf("%d",&k);
    12         a[k]++;
    13         len=max(len,k);
    14     }
    15     for(int i=1;i<=len;i++){
    16         cnt=0;
    17         for(int j=1;j*i<=len;j++){
    18             cnt+=a[i*j];
    19         }
    20         for(int j=1;j<=cnt;j++){
    21             c[j]=max(c[j],i);
    22         }
    23     }
    24     for(int i=1;i<=n;i++){
    25         printf("%d
    ",c[i]);
    26     }
    27     return 0;
    28 }
  • 相关阅读:
    os模块
    函数练习
    集合 去重
    作业二:购物车程序
    作业一: 三级菜单
    字典练习
    字典
    切片
    冒泡练习
    判断整型数据奇偶数
  • 原文地址:https://www.cnblogs.com/Elfish/p/7638022.html
Copyright © 2020-2023  润新知