Cao Cao is very pround of his newly finished book named "The Book of Mengde". He thinks the book contains all the wisdom of the world. But in order to prove this, he need to prove that he is the smartest people in the world first. In that age, people evaluate the intelligence of a man by his eloquence. So, Cao Cao begins to make a plan to argue with some famous person, like Guo Jia, Xun Yu and so on. Soon he realizes that the hardest opponent is Zhuge Liang. So he decide to make it the last opponent. Once he defeat Zhuge Liang in the argument. he will be consider the smartest man in the world and his book will be the best book.
Now, Cao Cao knows the intelligent point of himself and everyone he want to argue with before Zhuge Liang. And he knows that if he wins an argument.His intelligent point will increase because he can learn something from the argument. If he defeats a opponent whose intelligent point is higher than his, his intelligent point will increase by 2. If the intelligent point of the opponent is not higher than his, his intelligent point will only increase by 1.
Now,Cao Cao wants to know, what's the maximum intelligent point he could reach before he meets Zhuge Liang, assuming that he can win each argument before he meets Zhuge Liang.
The first line of each case contains two postive integer N(N <= 500) and IP. N is the number of people Cao Cao wants to argue with before he meets Zhuge Liang. IP is the intelligent point of Cao Cao at the begining. Then N postive integers followed describing the intelligent point of each opponent. Each intelligent point will be no higher than 1000.
For each case, output the maximum intelligent point Cao Cao can reach before he argue with Zhuge Liang.
5 91 88 90 92 94 98
99
【题解】
要获得最大智商,那么+2的次数要尽量多,所以必须先打败比他智商高一点点的人,+2后再次寻找比他智商高一点点的,直到没有比他高的,再从头去找剩下的,每次+1,最后得到最大值。
见代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=800;
int m,n,a[N];
int main()
{
while(~scanf("%d%d",&m,&n))
{
memset(a,0,sizeof(a));
for(int i=1;i<=m;++i)
scanf("%d",&a[i]);
sort(a+1,a+m+1);
for(int i=1;i<=m;++i)
{
if(n<a[i])
{
n+=2;
a[i]=-1;
}
}
for(int i=1;i<=m;++i)
{
if(a[i]!=-1)
n++;
}
printf("%d\n",n);
}
return 0;
}