牛客IOI周赛16-普及组 B
猜数
http://www.nowcoder.com/questionTerminal/c2dbf0054bea43e4a657c1ee49e141e1
Question
给你一堆数,询问你至少需要更改多少数字才能使和
Solution
贪心
首先求出原数和,如果已经 则
对一个数进行修改,要使其和 , 则肯定将这个数改成。
要使更改数字最少,那么肯定要让更改后的差值(加的值)尽可能大,因为始终将数改成,于是原数越小的应该越先改。
所以将原数按从小到大排序,然后 扫一遍即可。
Code:
#include<bits/stdc++.h> using namespace std; const int MAX_N=1e6 + 5; int n,m,a[MAX_N],Sum,ans; int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;++i){ scanf("%d",&a[i]); Sum=Sum+a[i]; } sort(a+1,a+1+n); for(ans=1;ans<=n;++ans){ if(Sum>=m){ break; } Sum=Sum+9-a[ans]; } printf("%d",ans); return 0; }