拳王争霸(队列、模拟、结构体)

这篇文章介绍了一个关于IT技术中的算法问题,涉及在拳击比赛中,通过比较能量值来确定能在连续获胜k场后成为“拳王”的选手。通过遍历数组并计算能量值,找到满足条件的“拳王”能量值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

泽泽的爱好非常广泛,拳击比赛是他的爱好之一。电视里正在播放拳王争霸赛,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;
 } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值