链接:https://ac.nowcoder.com/acm/contest/5389/B
来源:牛客网
题目描述
纸上写了 n 个数字,牛牛在之前改动了几个数字,他忘了他具体改了些数字了。
但是他记得动之前这些数字的和是 ≥m 的,求他最少改动几个数字。
注意:这些数字在改之前和改之后均在 0 ~ 9 之间,且为整数。
输入描述:
第一行给出 n,m
第二行给出 n 个 0 ~ 9 的整数
输出描述:
输出最少改动了几个数字。(保证答案 ≤n)
示例1
输入
2 3
1 1
输出
1
备注:
对于 50 %数据有 n≤20
对于 100 %数据有 n≤10^6
思想:贪心。
我的思路:首先sort一下,排完序后从最小的数字开始,从小到大变成9,知道和大于m的值。
代码:
#include<bits/stdc++.h>
using namespace std;
int n,m,sum=0,ans=0;
int a[1000001];
int main() {
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
sum+=a[i];
}
if(sum>=m)
{
printf("%d\n",ans);
return 0;
}
sort(a+1,a+n+1);
for(int i=1;i<=n+1;i++)
{ sum=sum+9-a[i];
if(sum>=m)
{
printf("%d\n",ans+1);
return 0;
}
else
{
ans++;
}
}
return 0;
}