Who is the Smartest Man 解题报告

Who is the Smartest Man

时间限制: 1秒 内存限制: 64M

Problem Description

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 tomake 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 beconsider 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 intelligentpoint will increase by 2. If the intelligent point of the opponent is nothigher 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.

Input

This problem contains multiple test cases. 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.

Output

For each case, output the maximum intelligent point Cao Cao can reach before he argue with Zhuge Liang.

Sample Input

5 91

88 90 92 94 98

Sample Output

99
 
 
 
 
 
 
这个题我的核心思路是这样的,先对题目随机给出的数据进行排序,然后用曹操的智商lp和第一个人开始比较。如果lp>=a[i],那么,lp+1,继续比较。如果lp<a[i],那么,lp+2,继续比较。解题过程中遇到的问题,第一个是排序。选择了快排。第二个就是输入输出的问题,题目要求多组输入输出也就算了,样例还只给一组,可是坑爹得可以。而且,题目还没告诉有几组输入数据,这样输出的时候又有点被坑的感觉。最后跌跌撞撞才AC了,估计又把通过率刷低了一个点......实在是抱歉......代码如下(最后在输出部分我自己认为效率还是有点底下,不过这个题对复杂度好像要求不是太高?):

#include <stdio.h>

void swap(int[], int, int);
void qsort(int [],int, int);

int n,i,op,j,k,lp;
int a[1000]={0},out[10000]={0};
int main(void)
{

j=0;
 while (scanf("%d%d",&n,&lp)!=EOF)
{
 for (i=0;i<n;i++)
 scanf("%d",&a[i]);
 qsort(a, 0, n-1);
   op=0;
        for (i=0;i<n;i++)
{
        if (lp>=a[i]) op=op+1;
           else if (lp<a[i]) lp=lp+2;
}
out[j++]=lp+op;

}
for (j=0;j<10000;j++)
{
      if (out[j]!=0)             
      printf("%d\n",out[j]);
}
 system("pause");
 return 0;

}
void qsort(int a[], int left, int right)
{
 int i,j,k,last;
 if(left >= right)
  return;
 i = (left + right)/2;
 swap(a,left, i);
 last = left;
 for(i = left+1; i<=right; i++)
 {
  if(a[i] < a[left])
   swap(a,++last, i);
 }
 swap(a,last,left);
 qsort(a,left,last-1);
 qsort(a,last+1, right);
}
 

void swap(int a[], int i, int j)
{
 int temp = a[i];
 a[i] = a[j];
 a[j] = temp;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值