在连续几天的没日没夜后,wy学姐颤颤巍巍地翻出了一个珍藏多年的宝典,只见上面赫然写着——《凡人修仙传》!
她正在可怜兮兮地临时抱佛脚来试图提升自己目前的实力以获得最后的胜利。
事情是这样的,wy学姐本来卡在瓶颈期多年,经过前几天的修炼,隐隐有突破之势,如今金身已就,眼看神功大成,只差渡劫!
就在这时,天空一道惊雷,她落入了一个结界之中,这正是她飞升的最后一道关卡!
这个结界里有很多斗法者,而她需要与其中的优胜斗法者(即最后的胜利者)进行对决,赢则飞升。
为了渡过此劫、成功飞升,谨慎起见,她决定先打探一下对手的情况。
那些人的斗法是这样的,n个斗法者排成一队(随机),前俩名斗法者打一场,输的人 走到队伍的最后,赢的人继续与下一个斗法者对决,依次类推,直到有人能连胜k场为止。
对于这种修仙对决,自然是修炼层数越高的人能获胜啦。
正所谓知己知彼,百战不殆。
wy学姐坚信,只要能提前准确地预测出她的对手,她就能在这短暂的时间内找到越级(或许不是呢qwq)挑战胜利的办法!
你能帮她找到修练到多少层的人会获胜吗?
Input
第一行输入两个整数: n and k (2 ≤ n ≤ 500, 2 ≤ k ≤ 1012) ——n代表排队的斗法者人数,k代表要连胜的场数
第二行有 n 个整数 a1, a2, ..., an (1 ≤ ai ≤ n)——即队伍中每个人修炼神功的层数。保证每个人各不相同。
Output
输出一个整数——最后的优胜斗法者修炼到的功力层数.
Examples
Input
2 2 1 2
Output
2
Input
4 2 3 1 2 4
Output
3
Input
6 2 6 5 3 1 2 4
Output
6
Input
2 10000000000 2 1
Output
2
Note
第二个样例解释
3 和1打. 3 赢. 1 到最后面去
3 和 2打. 3 赢. 他获得两场胜利,所以他是最后的赢家
解题方法:
这题我一开始 是把数组重复一遍去模拟比赛模式的 逐个遍历,但是一直错在了test 33。
后面发现如果前面的人数没打过后面的人 那么接下来胜利的人肯定可以打过前面所有的人 那么他就只需要胜利 k-i场就好了 然后如果 都没满足 就只需要输出最大的那个人就ok了
不难发现,因为输出条件最大值肯定是n ,所以最大值直接输出n就好了 接下来是代码 :
#include<iostream>
using namespace std;
int main()
{
int n,a[505],max=-1;
long long k;
cin>>n>>k;
int i,j;
for(i=0;i<n;i++)
{
cin>>a[i];
}
for(i=0;i<n;i++)
{
int h=a[i];
for(j=i+1;j<n;j++)
{
if(a[i]<a[j])
{
if(i==0&&(j-i>k)||i!=0&&(j-i)>=k)
{
cout<<a[i]<<endl;
return 0;
}
i=j-1;
break;
}
}
if(j>=n)
{
if(i==0&&(j-i>k)||i!=0&&(j-i)>=k){
cout<<a[i]<<endl;
return 0;
}
}
}
cout<<n<<endl;
}