CodeForces - 725D Contest Balloons 贪心
Contest Balloons
limit per test
3 seconds
limit per test
256 megabytes
standard input
standard output
One tradition of ACM-ICPC contests is that a team gets a balloon for every solved problem. We assume that the submission time doesn't matter and teams are sorted only by the number of balloons they have. It means that one's place is equal to the number of teams
with more balloons, increased by
1. For example, if there are seven teams with more balloons, you get the eight place. Ties are allowed.
You should know that it's important to eat before a contest. If the number of balloons of a team is greater than the weight of this team, the team starts to float in the air together with their workstation. They eventually touch the ceiling, what is strictly
forbidden by the rules. The team is then disqualified and isn't considered in the standings.
A contest has just finished. There are
n teams, numbered
1 through
n. The
i-th team has
ti balloons and weightwi.
It's guaranteed thatti
doesn't exceedwi
so nobody floats initially.
Limak is a member of the first team. He doesn't like cheating and he would never steal balloons from other teams. Instead, he can give his balloons away to other teams, possibly making them float. Limak can give away zero or more balloons of his team. Obviously,
he can't give away more balloons than his team initially has.
What is the best place Limak can get?
The first line of the standard input contains one integer
n (2 ≤ n ≤ 300 000) — the number of teams.
The
i-th of
n following lines contains two integers
ti andwi
(0 ≤ ti ≤ wi ≤ 1018) —
respectively the number of balloons and the weight of the
i-th team. Limak is a member of the first team.
Print one integer denoting the best place Limak can get.
8
20 1000
32 37
40 1000
45 50
16 16
16 16
14 1000
2 1000
3
7
4 4
4 4
4 4
4 4
4 4
4 4
5 5
2
7
14000000003 1000000000000000000
81000000000 88000000000
5000000000 7000000000
15000000000 39000000000
46000000000 51000000000
0 1000000000
0 0
2
In the first sample, Limak has
20 balloons initially. There are three teams with more balloons (32,40
and
45 balloons), so Limak has the fourth place initially. One optimal strategy is:
- Limak gives
6 balloons away to a team with
32 balloons and weight
37, which is just enough to make them fly. Unfortunately, Limak has only
14 balloons now and he would get the fifth place. - Limak gives
6 balloons away to a team with
45 balloons. Now they have
51 balloons and weight
50 so they fly and get disqualified. - Limak gives
1 balloon to each of two teams with
16 balloons initially. - Limak has
20 - 6 - 6 - 1 - 1 = 6 balloons. - There are three other teams left and their numbers of balloons are
40,
14 and
2. - Limak gets the third place because there are two teams with more balloons.
In the second sample, Limak has the second place and he can't improve it.
In the third sample, Limak has just enough balloons to get rid of teams
2,
3 and
5 (the teams with
81 000 000 000,
5 000 000 000 and
46 000 000 000 balloons respectively). With zero balloons left, he will get the second place (ex-aequo with team6 and team
7).
题目大意:有n个队伍,每个队伍有t个气球,重量为w,当气球个数超过重量时就飞走。要将自己的气球给别人,使得自己的名次达到最大。
分析:用结构体,将其按气球数量从大到小排序,气球数量相同时按重量与气球差值大小从小到大排,再使用优先队列求出。
#include<stdio.h>
#include<algorithm>
#include<queue>
using namespace std;
struct text{
long long num, wei;
long long dis;
};
struct text_cmp{
bool operator()(text a, text b)
{
return a.dis > b.dis;
}
};
bool cmp(text& a,text& b)
{
if (a.num == b.num)return a.dis<b.dis;
else return a.num>b.num;
}
text a[300000];
priority_queue<text,vector<text>,text_cmp>q;
int main()
{
int n,i;
scanf("%d", &n); for (i = 0; i < n;i++)
{
scanf("%lld %lld", &a[i].num, &a[i].wei);
a[i].dis = a[i].wei - a[i].num+1; } sort(a + 1, a + n, cmp);
for (i = 1; i<n; i++)
{
if (a[i].num>a[0].num)
{
q.push(a[i]);
}
else
{
break;
}
}
int temp=i, min=i;
int j=i;
while (!q.empty())
{
text c;
c = q.top();
a[0].num -= c.dis;
q.pop();
if (a[0].num < 0)
break;
temp--;
for (; j < n; j++)
{
if (a[j].num>a[0].num)
{
q.push(a[j]);
temp++;
}
else
{
break;
}
min = min<temp ? min : temp;
} }
//printf("%d %d\n", min, temp);
if (temp > min)
printf("%d\n", min);
else
printf("%d\n", temp);
return 0;
}
CodeForces - 725D Contest Balloons 贪心的更多相关文章
- codeforces 725D . Contest Balloons(贪心+优先队列)
题目链接:codeforces 725D . Contest Balloons 先按气球数从大到小排序求出初始名次,并把名次排在第一队前面的队放入优先队列,按w-t-1值从小到大优先,然后依次给气球给 ...
- Canada Cup 2016 D. Contest Balloons 好题。优先队列 + 简单贪心
http://codeforces.com/contest/725/problem/D 这题一看就是贪心的了,w - t最小的那个,肯定是优先打死. 但是一直都不会写,为什么呢,因为这个太像二分答案了 ...
- Codeforces Round #604 (Div. 2) C. Beautiful Regional Contest(贪心)
题目链接:https://codeforces.com/contest/1265/problem/C 题意 从大到小给出 $n$ 只队伍的过题数,要颁发 $g$ 枚金牌,$s$ 枚银牌,$b$ 枚铜牌 ...
- Contest Balloons
Contest Balloons 题目链接:http://codeforces.com/problemset/problem/725/D 贪心+枚举 每次在排名在自己前面的选出w-t值最小的送气球,更 ...
- Codeforces 161 B. Discounts (贪心)
题目链接:http://codeforces.com/contest/161/problem/B 题意: 有n个商品和k辆购物车,给出每个商品的价钱c和类别t(1表示凳子,2表示铅笔),如果一辆购物车 ...
- Codeforces 1154D - Walking Robot - [贪心]
题目链接:https://codeforces.com/contest/1154/problem/D 题解: 贪心思路,没有太阳的时候,优先用可充电电池走,万不得已才用普通电池走.有太阳的时候,如果可 ...
- Codeforces 830A. Office Keys (贪心二分 or DP)
原题链接:http://codeforces.com/contest/830/problem/A 题意:在一条数轴上分别有n个人和k把钥匙(n<=k),以及一个目的地,每个人要各自拿到一个钥匙后 ...
- codeforces 704B - Ant Man 贪心
codeforces 704B - Ant Man 贪心 题意:n个点,每个点有5个值,每次从一个点跳到另一个点,向左跳:abs(b.x-a.x)+a.ll+b.rr 向右跳:abs(b.x-a.x) ...
- codeforces.com/contest/325/problem/B
http://codeforces.com/contest/325/problem/B B. Stadium and Games time limit per test 1 second memory ...
随机推荐
- [转载]内存的一些magic number和debug crt
原文:http://www.360doc.com/content/13/0105/17/6295074_258392439.shtml 调试过debug版本的vc程序的人一定对0xCCCCCCCC和0 ...
- RulersGuides.js – 网站中实现 Photoshop 标尺效果
RulersGuides.js 是一个 JavaScript 库,在网页上添加类似 Photoshop 中的标尺和辅助网格线.要创建创建网格线线,请单击垂直或水平的标尺,然后推动就可以.还可以使用相应 ...
- asp.net中GridView传多个值到其它页面的方法
网站开发中,在页面之间的跳转,经常会用到传值,其中可能会传递多个值. 一.CommadArgument传多个值到其他页面. 像Gridview dataList repeater等数据绑定控件中,可以 ...
- linux 自定义yum仓库、repo文件 yum命令
目录 自定义yum仓库:createrepo 自定义repo文件 使用yum命令安装httpd软件包 卸载httpd软件包:yum –y remove 软件名 清除yum缓存:yum clean al ...
- vue、入门
入门vue v-on:click:chang 绑定事件点击 生面周期,整个vue的执行过程,他的应用执行了生面周期,也就是执行过程,这个执行过程如下图表,我们可以参考下图,也可以访问官方网址:ht ...
- Windows无法访问局域网内共享文件夹[0x800704cf,0x80070035]解决方案
Windows7系统突然无法访问访问其他windows机器的共享文件夹,出现0x800704cf或者0x80070035错误: 解决方案如下两张图,配置与下面两张图为准,即可解决: 1:window+ ...
- 20165320 Java实验三:敏捷开发与XP实践
实验内容: 敏捷开发与XP实践 一 实验要求: 安装alibaba 插件,解决代码中的规范问题在IDEA中使用工具(Code->Reformate Code)把下面代码重新格式化,再研究一下Co ...
- 2016.6.21——Climbing Stairs
Climbing Stairs 本题收获: 1.斐波那契函数f(n) = f(n-1) + f(n -2) 题目: You are climbing a stair case. It takes n ...
- MySQL字符集 GBK、GB2312、UTF8区别 解决 MYSQL中文乱码问题 收藏 MySQL中涉及的几个字符集
MySQL中涉及的几个字符集 character-set-server/default-character-set:服务器字符集,默认情况下所采用的.character-set-database:数据 ...
- AndroidManifest.xml权限设置
访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据库属性表的权限 获取错略位置 android.permi ...