题意:先给定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("\n"); return 0;
}

CodeForces 540B School Marks (贪心)的更多相关文章

  1. (CodeForces )540B School Marks 贪心 (中位数)

    Little Vova studies programming to p. Vova is very smart and he can write every test for any mark, b ...

  2. CodeForces - 540B School Marks —— 贪心

    题目链接:https://vjudge.net/contest/226823#problem/B Little Vova studies programming in an elite school. ...

  3. CodeForces 540B School Marks

    http://codeforces.com/problemset/problem/540/B School Marks Time Limit:2000MS     Memory Limit:26214 ...

  4. codeforces 540B.School Marks 解题报告

    题目链接:http://codeforces.com/problemset/problem/540/B 题目意思:给出 k 个test的成绩,要凑剩下的 n-k个test的成绩,使得最终的n个test ...

  5. CodeForces 540B School Marks(思维)

    B. School Marks time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  6. codeforces 704B - Ant Man 贪心

    codeforces 704B - Ant Man 贪心 题意:n个点,每个点有5个值,每次从一个点跳到另一个点,向左跳:abs(b.x-a.x)+a.ll+b.rr 向右跳:abs(b.x-a.x) ...

  7. CodeForces - 50A Domino piling (贪心+递归)

    CodeForces - 50A Domino piling (贪心+递归) 题意分析 奇数*偶数=偶数,如果两个都为奇数,最小的奇数-1递归求解,知道两个数都为1,返回0. 代码 #include ...

  8. Codeforces 161 B. Discounts (贪心)

    题目链接:http://codeforces.com/contest/161/problem/B 题意: 有n个商品和k辆购物车,给出每个商品的价钱c和类别t(1表示凳子,2表示铅笔),如果一辆购物车 ...

  9. CodeForces 176A Trading Business 贪心

    Trading Business 题目连接: http://codeforces.com/problemset/problem/176/A Description To get money for a ...

随机推荐

  1. each函数遍历select标签下的所有option选项

    如下: <select id="asd" name="sweet1"> <option value=1>--四川--</optio ...

  2. Jquery获取用户控件页面中控件的值

    $('#<%= txt_P_name.ClientID%>').val()

  3. SSMS安装英文版后无法修改为中文

    SSMS的UI语言和所安装的Visual Studio的语言是相关的,你这种情况应该是第一次安装的时候安装了英文版的visual studio isolated shell,在卸载的时候你没有卸载这个 ...

  4. Hashtable、HashMap

    JDK1.6 API public class Hashtable<K,V>extends Dictionary<K,V>implements Map<K,V>, ...

  5. Docker 存储之卷(Volume)

      理解Docker(8):Docker 存储之卷(Volume) (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespa ...

  6. Eclipse的基本使用

    01Eclipse的下载安装 * A: Eclipse的下载安装  * a: 下载 * http://www.eclipse.org * b: 安装 * 只需要解压后就能使用 * c: 卸载 * 只 ...

  7. OpenLayers 3 之 地图视图(View)

    OpenLayers 3 之 地图视图(View) 初始化一幅地图,必备的三要素之一视图(view),这个对象主要是控制地图与人的交互,如进行缩放,调节分辨率.地图的旋转等控制.也就是说每个 map对 ...

  8. tornado 自定义session (二)

    有了上一步的基础,我们将session改造成一个模块,这样我们就可以通过配置,来使用不同方式(redis,数据库等)的session. 添加一个新目录:TornadoSession conf.py是配 ...

  9. DOS口令启用停用的管理员密码

      运行,输入cmd,但是不回车,鼠标右键cmd那个   快捷方式,有个以管理员身份运行,进入的dos是     c:\windows\system32>   输入   c:\windows\s ...

  10. <转>杜绝 Defunct进程 僵尸进程

    http://hanover.iteye.com/blog/881972 在测试基于 DirectFB+Gstreamer 的视频联播系统的一个 Demo 的时候,其中大量使用 system 调用的语 ...