题目描述
泽泽的爱好非常广泛,拳击比赛是他的爱好之一。电视里正在播放拳王争霸赛,n个人排成一排,他们进行拳击比赛,先让最前面两个人进行比赛,赢的人再和下面一个人比赛,输的人排到队伍的末尾。每一次比赛的结果是由比赛的两个人的能量确定,能量大的人胜(注:保证所有人的能量都不同,假设所有人的能量能瞬间恢复,精力一直是旺盛的)。大赛规定:只要能连续获胜 k 场的人将成为“拳王”。
输入
第一行输入两个整数n和k,分别表示总人数和需要连续获胜的次数。
第二行有n个整数,A_1,A_2,...,A_n(1<=A_i<=n),分别表示每个人的能量。
输出
输出一个整数,就是 “拳王”的能量。
样例输入 Copy
【样例1】 2 2 1 2 【样例2】 4 2 3 2 1 4 【样例3】 2 10000000000 2 1
样例输出 Copy
【样例1】 2 【样例2】 3 【样例3】 2
提示
【样例2解释】
有4个人参赛,只要能按比赛规定连续获得2次胜利,那个人就是拳王。
第1个人的能量是3,他先跟能量2打,能量3获得胜利,能量2排到队伍的末尾。能量3再跟能量1打,能量3继续获胜。 他连续两次获胜,所以他成为“拳王”。
【数据范围约定】
对于50%的数据,保证2<=k<=n。
对于100%的数据,保证 2<=n<=500,2<=k<=1000000000000。
#include <bits/stdc++.h>
using namespace std;
/*这一题说是队列问题但其实根本不用移动任何元素
因为答案就在这n个元素的任意一个当中
我们只需要遍历一遍数组,如果这个元素的后面有K个数比当前元素大。那么这个元素就是拳王
如果我们遍历到了这个数组中的最大值,那这个最大值就肯定是拳王
*/
int main()
{
long long int k;
int a[505],i,n,maxi=0;
cin>>n>>k;
for(i=0;i<n;i++)
{
cin>>a[i];
maxi=max(maxi,a[i]);//找出最大值
}
for(i=0;i<n;i++)
{
if(a[i]==maxi)
{
cout<<a[i];//如果遍历的过程中遍历到了最大值,拳王就产生了,可以直接结束
return 0;
}
int s=0,j=i+1;//s是代表当前元素后面有多少个比它大的
//j是代表后面元素的下标
while(a[i]>a[j])
{
j++;
s++;
if(s==k)//如果s的值比K大,那就说明找到了拳王,也可以直接结束
{
cout<<a[i];
return 0;
}
}
}
return 0;
}