Tea Party

CodeForces - 808C

现在有 n 个杯子,每个杯子的容量为 a1, a2, ..., an。他现在一共有 w 毫升茶 (w ≤ a1 + a2 + ... + an)。现在要求每个杯子都满足以下条件:

  • 每个杯子必须装整数的茶水
  • 每个杯子至少装一半的茶水(奇数向上取整)
  • 所有茶水必须放到杯子中
  • 容量大的杯子里的水不可以比容量小的杯子里的茶水少

给出任意一组合法答案。如果不存在合法方案,输出 -1。

解法:

贪心,先把所有的杯子都放好一半(如果w<(a1 + a2 + ... + an)/2,说明不存在合法方案),如果还有剩余的茶,都往最大的大杯子里倒,倒满了就往第二大的杯子里倒,以此类推。
所以要先根据杯子容量把所有杯子排序一遍,把茶都分配倒完之后,再根据杯子原本的序号排好序,从1~n输出结果。

#include <cstdio>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <string>
#include <cstring>
using namespace std;
#define _ ios::sync_with_stdio(false),cin.tie(0) const int MAXN = 5010;
const int INF = 0xfffffff;
typedef long long ll; struct node
{
int a;
int b;
int id;
}cup[150]; bool cmp1(node a,node b)
{
return a.a>b.a;
}
bool cmp2(node a,node b)
{
return a.id<b.id;
}
int main()
{
int n,w;
int half=0;
cin>>n>>w;
for(int i=0;i<n;i++)
{
int x;
cin>>x;
cup[i].a=x;
cup[i].b=(cup[i].a+1)/2;
cup[i].id=i;
half+=cup[i].b;
}
if(w<half)
{
cout<<-1<<endl;
return 0;
}
w-=half;
int i=0;
sort(cup,cup+n,cmp1);
// cout<<w<<endl;
while(w>0)
{
if(w>=cup[i].a-cup[i].b)
{
w-=cup[i].a-cup[i].b;
cup[i].b=cup[i].a;
}
else
{
cup[i].b+=w;
// cout<<"i="<<i<<" cup[i].b="<<cup[i].b<<endl;
w=0;
}
i++;
}
sort(cup,cup+n,cmp2);
for(int j=0;j<n;j++)
cout<<cup[j].b<<" ";
return 0;
}

CodeForce-808C Tea Party(结构体排序贪心)的更多相关文章

  1. 洛谷P1068 分数线划定:sort结构体排序+贪心

    题目描述 世博会志愿者的选拔工作正在 A 市如火如荼的进行.为了选拔最合适的人才,A市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试. 面试分数线根据计划录取人数的150%划定, ...

  2. poj1456 结构体排序+贪心

    题意:给出很多商品,每个商品有价值和出售期限,只能在期限内出售才能获取利润,每一个单位时间只能出售一种商品,问最多能获得多少利润. 只需要按照优先价值大的,其次时间长的排序所有物品,然后贪心选择,从它 ...

  3. HDOJ 1009. Fat Mouse' Trade 贪心 结构体排序

    FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  4. 转载 从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法

    转载自:http://www.cnblogs.com/cj695/p/3863142.html sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在 ...

  5. 【转】 从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法

    sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在vector中的用法分为sort函数入门用法与自定义comp比较函数比较结构体这两个最基本的功能 ...

  6. 网上关于sort结构体排序都不完整,我来写一个完整版的 2014-08-09 16:50 60人阅读 评论(0) 收藏

    主要参考sort函数_百度文库, 但是那篇有错误 2.结构体排序,a升,b降,c降 平板视图 打印? 01 #include <iostream> 02 #include <algo ...

  7. hdu1263 水果(结构体排序)

    Problem Description 夏天来了~~好开心啊,呵呵,好多好多水果~~ Joe经营着一个不大的水果店.他认为生存之道就是经营最受顾客欢迎的水果.现在他想要一份水果销售情况的明细表,这样J ...

  8. <algorithm>里的sort函数对结构体排序

    题目描述 每天第一个到机房的人要把门打开,最后一个离开的人要把门关好.现有一堆杂乱的机房签到.签离记录,请根据记录找出当天开门和关门的人. 输入描述: 每天的记录在第一行给出记录的条目数M (M &g ...

  9. JustOj 2039: 成绩排名 (结构体排序)

    题目描述 每次期末考试成绩出来之前的一段时间大豪哥心里都是痛苦的,总感觉自己会在班上排名特别差.所以当成绩出来以后大豪哥想快点知道班上的总排名,以便知道自己的排名.(PS:大豪哥班上有个学霸名叫日天, ...

随机推荐

  1. 【Lua篇】静态代码扫描分析(一)初步介绍

    一.静态代码分析         静态代码分析是一种通过检查代码而不是执行程序来发现源代码中错误的手段.通常可以帮助我们发现常见的编码错误,例如: 语法错误 违反制定的标准编码 未定义的变量 安全性问 ...

  2. WPF listbox 实现动态滚轮下拉定位

    private ObservableCollection<keymodel> _listlua; public ObservableCollection<keymodel> l ...

  3. SpringBoot开发二十-私信列表

    私信列表功能开发. 发送私信功能开发 首先创建一个实体类:Message package com.nowcoder.community.entity; import java.util.Date; p ...

  4. 【C语言】浮点型在内存中的存储

    1. 摘要 在了解到C语言中整型是以二进制补码形式存储在内存中后,我们不禁很好奇:那么浮点型的数据是以什么形式存储在内存中的呢? 实际上,早在1985年,电气电子工程师学会就制定了IEEE 754标准 ...

  5. XCTF_ics-07

    这道题确实也卡了很久 垮了垮了 话不多说直接找到view source.php审代码吧 先看这段 要你: (1)floatval($ _ GET [id])!=='1' //浮点不为1 (2)subs ...

  6. 异步编程async体会

    namespace 异步编程{ class Program { static void Main(string[] args) { Console.WriteLine("mian this ...

  7. git 的指定参考教程

    https://www.runoob.com/git/git-create-repository.html

  8. C#多线程---Monitor实现线程同步

    一.简介 Monitor.Enter和Monitor.Exit方法来实现线程同步,这个属于排他锁,即每次只有一个线程可以访问共享数据. C#中通过lock关键字来提供简化的语法,lock可以理解为Mo ...

  9. sizeof()和 strlen()的区别 --- 个人笔记

    在学习C语言和linux的时候,遇到了一些常见问题.题目,有些很简单,有些容易出错,本人水平有限,未免会出错,今天有时间,就将以前做的笔记,一一拿出来,写写blog. sizeof()和 strlen ...

  10. jQuery中ajax请求的六种方法(三、六):load()方法

    6.load()方法 load的html页面 <!DOCTYPE html> <html> <head> <meta charset="UTF-8& ...