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 ...
随机推荐
- Java实现基于桶式排序思想和计数排序思想实现的基数排序
计数排序 前提:待排序表中的所有待排序关键字必须互不相同: 思想:计数排序算法针对表中的每个记录,扫描待排序的表一趟,统计表中有多少个记录的关键码比该记录的关键码小,假设针对某一个记录,统计出的计数值 ...
- 网页制作中最有用的免费Ajax和JavaScript代码库
网上看到的一篇小文,挺有用的,收藏在这. 本文中,我整理了12个免费的Ajax和JavaScript代码库,可以帮助Web开发人员将应用程序提升到一个新水平. Ajax Instant Messeng ...
- [php]php总结(2)
18.数组$arr[null] = 20; //array([]=>20)$arr[] = 20;//默认为下一个下标赋值unset()可以删除数组元素,但不会重建索引array_values( ...
- 网络爬虫框架Heritrix中Modules的各项说明
1)Select Crawl Scope:Crawl Scope 用于配置当前应该在什么范围内抓取网页链接.例如选择 BroadScope 则表示当前的抓取范围不受限制,选择 HostScope 则表 ...
- js操作控制iframe页面的dom元素
1.代码1 index.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...
- MVVM模式的模式简介
MVVM模式简介 MVVM是Model.View.ViewModel的简写,这种模式的引入就是使用ViewModel来降低View和Model的耦合,说是降低View和Model的耦合.也可以说是是降 ...
- sicily 1500. Prime Gap
Description The sequence of n ? 1 consecutive composite numbers (positive integers that are not prim ...
- 五、springcloud之客户端负载均衡Ribbon
一.简介 在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的.Spring cloud有两种服务调用方式: 一种是ribbon+restTemplate, ...
- Mac上删除不了的文件,Windows上也粉碎不了怎么办?
推荐一个Mac上的软件:Tuxera Disk Manager 用法很简单:选择删除文件原来所在的文件进行维护就可以了. 维护之后,在废纸篓中清除,成功.
- 详述Java对象创建
Java是一门面向对象的语言,Java程序运行过程中无时无刻都有对象被创建出来.在语言层面上,创建对象(克隆.反序列化)就是一个new关键字而已,但是虚拟机层面上却不是如此.我们看一下在虚拟机层面上创 ...