对所有的数字升序排序

对于第i个数是冠军,他要赢k场

其中,1~i-1是必赢的

i~j是与他相同大小的,也是必赢的

这时就赢了j-1场了(下标到j,不赢自己)

冠军总共需要下场k场,则还剩

need=k-(j-1)=k-j+1场需要赢

对于两种道具,最多用在两个人身上,赢两场

所以仅当need<=2时有解,need>2时无解

考虑need<=0的情况,则此时必赢。

剩下两种情况,need=1和need=2

先考虑need=2的情况,则i一定要进行两场战斗

除二道具比乘二道具效果更强(a[n]是奇数时获胜条件可以更小)

所以对a[n]使用除二道具得到x=a[n]/2

若a[i]>=x,则证明可以赢n

然后还需要赢一场,我们知道n是一定可以赢所有人的

为了保险起见,我们挑最弱的一个a[i+1]

使用乘二道具,a[i]*2>=a[i+1] 则胜利

此时两个条件都满足,证明i可以再赢两场,战胜n成为冠军

否则i就不可以成为冠军

考虑need=1的情况,i只用战斗一场就可以了

最粗鲁的办法是,对i使用乘二,对n使用除二

直接判断 a[i]*2>=a[n]/2, 这样就错了

比如3 7 14这一组样例

我们可以对7使用x2道具让他战胜14

再对7使用/2道具被3战胜

这样3是可以成为冠军的

但是如果直接判断,3*2=6 < 14/2=7

正确做法是,考虑对一个中间数x

x=a[n]/2;

y=a[i]*2;

如果a[n]是偶数,则y还可以增大1

要满足

(1)y大于等于x

(2)y在数组里出现

用二分查找到y的位置

p=lower_bound(a,a+n,y)-a;

直接判断

(1)a[p]*2>=a[n]&&a[i]>=a[p]/2

(2)a[p]>=a[n]/2&&a[i]*2>=a[p]

其中之一成立都可以

否则i不可以成为冠军