• codeforces school mark(贪心)


     1 ///太渣,看了题解才知道怎么做,自己想感觉想不清楚
     2 ///题解:首先在给出的序列里判断小于median的个数,若大于(n-1)/2,则不满足,否则看另一个条件
     3 ///这样我们可以把中位数左边还要添加的数字构造成1,右边的数字全构造成median,这样中位数保证不会小于y,再看总和是否超过即可
     4 #include<iostream>
     5 #include<stdio.h>
     6 #include<string>
     7 #include<vector>
     8 using namespace std;
     9 int main()
    10 {
    11 
    12     int a,n,p,k,x,y,low = 0,sum = 0;
    13     cin>>n>>k>>p>>x>>y;
    14     for(int i = 0 ; i<k ; i++)
    15     {
    16         cin>>a;
    17         if(a<y) low++;
    18         sum += a;
    19     }
    20     if(low>(n-1)/2) printf("-1
    ");
    21     else
    22     {
    23         int left = min((n-1)/2-low,n-k);
    24         ///如果不加min 9 7 2 14 1
    25         ///            2 2 2 1 1 2 2 这组数据会出错误
    26         int right = n-k - left;
    27         if(left+y*right+sum>x) printf("-1
    ");
    28         else
    29         {
    30           vector<int> v;
    31           for(int i = 0;i<left;i++)
    32             v.push_back(1);
    33           for(int i = 0;i<right;i++)
    34             v.push_back(y);
    35             int len = v.size();
    36           for(int i = 0;i<len;i++)
    37             printf("%d%s",v[i],i==len-1?"
    ":" ");
    38         }
    39     }
    40     return 0;
    41 }
  • 相关阅读:
    Data Security---->Control Access to the Organization
    Data Modeling
    Slaesforce Paltform Development Basic
    Customize your Chatter Experience.
    wamp自定义网站根目录及多站点配置
    1053-1055
    1046-1052
    1044-1045
    HDOJ 1038-1043
    HDOJ 1031-1037
  • 原文地址:https://www.cnblogs.com/jiachinzhao/p/4546950.html
Copyright © 2020-2023  润新知