列表

详情


NC215078. 法力增幅

描述

有一款卡牌游戏,游戏开始有n张卡牌,第i卡牌的费用为a[i],有总费用x,你可以选一卡牌,当你选了第i张卡牌你会消耗a[i]费用,之后的每张牌费用都会减1(费用不会为负, 减到0时就不会再减了),问最多能使用多少张卡牌

输入描述

第一行两个整数(用空格隔开) n   x ,其中n为卡牌数量,x为总费用值。

第二行 n个整数(用空格隔开),a_1 a_2 ... a_na_i为第i张卡牌的费用值。

输出描述

一个整数,表示能用出的最大卡牌数量。

示例1

输入:

5 8
4 4 4 3 7

输出:

3

说明:

一共使用了3张牌

第一次使用了第3张卡牌费用为4,总费用还剩4, 剩余4张卡片费用为[3,3,2,6]。

第二次使用了第2张卡片费用为3,总费用还剩1,剩余3张卡片费用为[2,1,6]。

第三次使用了第2张卡片费用为1,总费用还剩0,剩余2张卡片费用为[1,5]

所以能使用最大卡牌数量为3。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(clang++11) 解法, 执行用时: 85ms, 内存消耗: 1056K, 提交时间: 2020-12-18 19:42:58

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
	long long int n,x,i,j=0,a[100000];
	cin>>n>>x;
	for(i=0;i<n;i++)
		cin>>a[i];
	sort(a,a+n);
	while(x>=a[j]&&j<n)
	{
		x-=a[j++];
		for(i=0;i<n;i++)
			if(a[i]==0);
			else
				a[i]=a[i]-1;
	}
	cout<<j;
}

上一题