ZCMU1143又是比智力

                                                    1143: 又是比智力

                                                                 Time Limit: 1 Sec  Memory Limit: 128 MB
                                                                              Submit: 1717  Solved: 327
                                                                              [Submit][Status][Web Board]

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

题意:

松哥原来智力为m,然后只要和他智商低的人比较,他的智商就能加2,反之,智商加一

思路:

这道题目虽然比较水,但是对于像我这样acm刚入门的还是要写一下的,先用sort把所有人的智商排序一下,然后先把智商比松哥小的都比较了一次,松哥的智商也得到了提高。注意注意注意,下面的就要看清楚了,不是按顺序了,是一种贪心的思路,反正都比不过,那就把智商最高的先比,万一等下能把智商稍微第一点的比下去呢。

下面画个图:

实际上就是每次都和6比,然后把11淘汰。

代码:

#include <bits/stdc++.h>
using namespace std;
int main()
{
	int n, m, a[100100];
	while (~scanf("%d %d",&m,&n))
	{
		memset(a, 0, sizeof(a));
		for (int i = 0; i < n; i++)
		{
			scanf("%d",&a[i]);
		}
		sort(a, a + n);//这里排序要排好,容易忘记 
		for (int i = 0; i < n; i++)
		{
			if (a[i] < m)
			{
				m+=2;
			}
			else//要点,比不过当前的,那就去跟智力最高的一个比,即n--,i--
			{	//这一步非常好用,当a【i】>=m的时候的第一次出现的时候,那说明最后一个肯定要比m大,所以把最后一个直接去掉了 
				n--;
				i--;
				m++;
			}
		}
		printf("%d\n",m);
	}
	return 0;
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值