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. Shell-06-正则表达式

    正则表达式 shell正则表达式分为两种 基础正则表达式:BRE 扩展正则表达式:ERE,扩展的表达式有 + .? .| 和 () 元字符表 * 匹配0次或多次 更多请查看相关网站 http://ww ...

  2. 最详细之教你Jenkins+github自动化部署.Net Core程序到Docker

    环境 centos7.9,.NET5 一.Jenkins搭建 1)下载Jenkins的war包 在\home目录建一个jenkins目录放jenkins的包 #进入\home目录 cd \home # ...

  3. h5与小程序互相跳转,传参和获取参数

    1.h5跳转到小程序 首先引入js文件 <script src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js">< ...

  4. flutter捕获应用退出弹出对话框

    使用WillPopScope组件,它会检测到子组件的Navigation的pop事件,并拦截下来.我们需要在它的onWillPop属性中返回一个新的组件(一般是一个Dialog)处理是否真的pop该页 ...

  5. ASP.NET Core教程:ASP.NET Core中使用Redis缓存

    参考网址:https://www.cnblogs.com/dotnet261010/p/12033624.html 一.前言 我们这里以StackExchange.Redis为例,讲解如何在ASP.N ...

  6. spring boot , spring security 安全的认证

    pom 文件 ------------------------------------------------------------------- <dependencies> < ...

  7. Java静态内部类——重点是精妙的demo

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/cd18333612683/article/details/79129503什么是内部类大部分时候,类 ...

  8. win系统打不开CHM文件(例如JDK的API)

    打开文件乱码,打开时弹出乱码 前提说明,存放路径不得有中文,文件名也不能有中文 检查下面三个文件:    hh.exe文件放置电脑 C:\Windows目录下:     hhctrl.ocx ,its ...

  9. Bing每日壁纸的RESTful接口实现

    0x00 存在意义 权且当作Docker打包的练习. 显然可以通过构造请求获得每天的壁纸,但是如果想要优雅地在其它地方使用这一网络资源,封装一个RESTful API将会保证整洁美观,在编写CSS等场 ...

  10. python 截屏操作

    方法1: 用pyscreenshot,https://pypi.org/project/pyscreenshot/ 方法2:用autopy,https://pypi.org/project/autop ...