Description
松哥上了数学课之后,觉得自己智力实在有所不足,所以他决定找人辩论,以提高自己的智力,已知松哥目前的智力是m,他决定和n个人辩论,如果他对手的智力低于他,松哥的智力能够提升2,否则只能提升1,假设松哥能够取得所有的胜利,请问他完成n场辩论后能够得到的最高智力是多少?
Input
多组测试数据.
每组测试数据的第一行包含两个正整数m,n.(m<=100,n<=10^5)
第二行为n个不大于100的整数,代表与他辩论人的智力.
Output
对于每组测试数据,他完成n场辩论后,能取得的最大的智力.
Sample Input
91 5
88 90 92 94 98
Sample Output
101
解析
贪心。因为跟比自己智力低的对手比提高的多,所以先把对手按智力从低到高排序。先跟低的比,如果自己比当前智力最低的对手还低,那么先跳过他去跟智力最高的人比提高自己的智力,待自己智力提高后再返回去和智力低的人比。
代码
#include<bits/stdc++.h>
using namespace std;
int p[100005];
int main()
{
int wise,n;
while(~scanf("%d%d",&wise,&n))
{
for(int i=0;i<n;i++)
{
scanf("%d",&p[i]);
}
sort(p,p+n);
for(int i=0;i<n;i++)
{
if(wise>p[i])
wise+=2;
else
{
i--; n--;
wise++;
}
}
printf("%d\n",wise);
}
return 0;
}