• CodeForces 540B School Marks (贪心)


    题意:先给定5个数,n,  k, p, x, y。分别表示 一共有 n 个成绩,并且已经给定了 k 个,每门成绩 大于0 小于等于p,成绩总和小于等于x,

    但中位数大于等于y。让你找出另外的n-k个成绩。

    析:利用贪心算法,首先是只能小于等于 p,也就是成绩越小越好, 然后中位数还得大于等于y,所以我们放的成绩只有两个,一个是1,另一个是y,那么是最优的,

    所以每次只要判定这个就好,在判定的时候,要先排序,再找中位数,再就是每次放两个,如果n-k不是偶数,那么就放一个数,再进行。

    代码如下:

    #include <bits/stdc++.h>
    
    using namespace std;
    typedef long long LL;
    const int maxn = 1e5 + 5;
    const int INF = 0x3f3f3f3f;
    vector<int> ans;
    int a[1005];
    
    int main(){
        int n, m, p, x, y, k;
        scanf("%d %d %d %d %d", &n, &k, &p, &x, &y);
        int sum = 0;
        for(int i = 0; i < k; ++i){
            scanf("%d", &a[i]);
            sum += a[i];
        }
        int ds = x - sum;
        int dn = n - k;
        bool ok = true;
        if(dn & 1){
            sort(a, a+k);
            if(a[k/2] >= y){
                ans.push_back(1);
                a[k++] = 1;
                ds--;
            }
            else{
                ans.push_back(y);
                a[k++] = y;
                ds -= y;
            }
            dn = n - k;
        }
    
        for(int i = 0; i < dn; i += 2){
            sort(a, a+k);
            int mid = a[k/2];
            if(mid < y){
                ans.push_back(y);
                ans.push_back(y);
                ds -= y * 2;
                a[k++] = y;
                a[k++] = y;
            }
            else {
                a[k++] = 1;
                ans.push_back(1);
                a[k++] = 1;
    
                sort(a, a+k);
                if(a[k/2] < y){
                    a[0] = y;
                    ds -= y + 1;
                    ans.push_back(y);
                }
                else{  ds -= 2;
                    ans.push_back(1);
                 }
            }
        }
    
    
        sort(a, a+k);
        if(a[k/2] < y || ds < 0)  printf("-1");
        else for(int i = 0; i < ans.size(); ++i)
                if(!i)  printf("%d", ans[i]);
                else printf(" %d", ans[i]);
        printf("
    ");
    
        return 0;
    }
    
  • 相关阅读:
    HTML 中的几种空格字符
    css第二天
    css第一天
    html第二天
    html 第一天
    javaScript
    数据类型扩展
    Hello world可能遇到的问题
    卸载安装jdk的步骤与问题
    windows常用快捷键和Dos命令
  • 原文地址:https://www.cnblogs.com/dwtfukgv/p/5702242.html
Copyright © 2020-2023  润新知