CodeForce 191B Demonstration(贪心)

description

In the capital city of Berland, Bertown, demonstrations are against the recent election of the King of Berland. Berland opposition, led by Mr. Ovalny, believes that the elections were not fair enough and wants to organize a demonstration at one of the squares.

Bertown has n squares, numbered from 1 to n, they are numbered in the order of increasing distance between them and the city center. That is, square number 1 is central, and square number n is the farthest from the center. Naturally, the opposition wants to hold a meeting as close to the city center as possible (that is, they want an square with the minimum number).

There are exactly k (k < n) days left before the demonstration. Now all squares are free. But the Bertown city administration never sleeps, and the approval of an application for the demonstration threatens to become a very complex process. The process of approval lasts several days, but every day the following procedure takes place:

The opposition shall apply to hold a demonstration at a free square (the one which isn’t used by the administration).
The administration tries to move the demonstration to the worst free square left. To do this, the administration organizes some long-term activities on the square, which is specified in the application of opposition. In other words, the administration starts using the square and it is no longer free. Then the administration proposes to move the opposition demonstration to the worst free square. If the opposition has applied for the worst free square then request is accepted and administration doesn’t spend money. If the administration does not have enough money to organize an event on the square in question, the opposition’s application is accepted. If administration doesn’t have enough money to organize activity, then rest of administration’s money spends and application is accepted
If the application is not accepted, then the opposition can agree to the administration’s proposal (that is, take the worst free square), or withdraw the current application and submit another one the next day. If there are no more days left before the meeting, the opposition has no choice but to agree to the proposal of City Hall. If application is accepted opposition can reject it. It means than opposition still can submit more applications later, but square remains free.
In order to organize an event on the square i, the administration needs to spend ai bourles. Because of the crisis the administration has only b bourles to confront the opposition. What is the best square that the opposition can take, if the administration will keep trying to occupy the square in question each time? Note that the administration’s actions always depend only on the actions of the opposition.

Input

The first line contains two integers n and k — the number of squares and days left before the meeting, correspondingly (1 ≤ k < n ≤ 105).

The second line contains a single integer b — the number of bourles the administration has (1 ≤ b ≤ 1018).

The third line contains n space-separated integers ai — the sum of money, needed to organise an event on square i (1 ≤ ai ≤ 109).

Please, do not use the %lld specifier to read or write 64-bit integers in С++. It is preferred to use the cin, cout streams or the %I64d specifier.

Output

Print a single number — the minimum number of the square where the opposition can organize the demonstration.

Examples

inputCopy
5 2
8
2 4 5 3 1
outputCopy
2
inputCopy
5 2
8
3 2 4 1 5
outputCopy
5
inputCopy
5 4
1000000000000000
5 4 3 2 1
outputCopy
5

Note

In the first sample the opposition can act like this. On day one it applies for square 3. The administration has to organize an event there and end up with 3 bourles. If on the second day the opposition applies for square 2, the administration won’t have the money to intervene.

In the second sample the opposition has only the chance for the last square. If its first move occupies one of the first four squares, the administration is left with at least 4 bourles, which means that next day it can use its next move to move the opposition from any square to the last one.

In the third sample administration has a lot of money, so opposition can occupy only last square.

思路

题目大意就是有几块空地,然后又一帮人想要用它,可以免费租用。但是政府又不想给他用,然后就想了个办法,把这块地拿来干别的,这样他们就用不了了。但是政府要拿这块第干别的,是要花钱的。那帮人也想了个主意,在真正用这块地之前,先选别的地,将政府的前耗光
因为最后租用的地越靠前越好,可以从第一块开始遍历。那么前几天就肯定要租别的地去消耗政府的钱,所以就可以政府的钱减去除了要租的这块地,最贵的几个,看看是否够要租的地。如果不够,说明该方案可行。
但是这么算会超时的。
因为每一次都要计算价钱排在前k-1的地,可以将它们先都加起来。如果要租的地在这几块之中,就在加上第k块的,如果不在,就加上其本身的,和政府的总钱数作比较
还有第n块是肯定可以用的,所以所有的判断都无需考虑他。最后如果前面都不行,就是第n块

代码

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;

int ori[100005];
int sor[100005];

int main()
{
	long long int m,sum=0;
	int n,k;
	cin>>n>>k>>m;
	for(int i=1;i<=n;i++)
		scanf("%d",&ori[i]);
	ori[n]=0;										//第n块的租金置零 
	memcpy(sor,ori,sizeof(ori));					//数组复制 
	sort(sor+1,sor+n+1,greater<int>());				//从大到小排序 
	for(int i=1;i<k;i++)
		sum+=sor[i];								//前k块和 
	bool flag=1;									//记录前n块之中是否有可行的 
	long long int tmp;
	for(int i=1;i<n;i++)
	{
		tmp=sum;
		if(ori[i]>=sor[k])							//此处我感觉是k和k-1都可,但提交k-1就不对    个人认为可能是k有等于1的情况 
			tmp+=sor[k];
		else
			tmp+=ori[i];
		if(tmp>m)
		{
			cout<<i;
			flag=0;
			break;
		}			
	}
	if(flag)
		cout<<n;
	return 0; 
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值