题目描述
这个游戏是这样的,wind先写下一排数。既然是一排,当然有首尾咯。
wind和小杉(lolanv)每次只能从这排数的头或尾取一个数。最后谁取的数的和多,谁就赢了。如果两人的和一样多,先取者胜。
有天swgr看到他们俩在玩这个游戏,很好奇。他想知道,在两人总是做出最优决策的情况下(两个人的智商都是很高的……),谁能取得最终的胜利呢?
输入数据
第一行为一个数 k (k≤ 10) ,表示有 k 组测试数据。
以下 k 组测试数据。
每组测试数据中,第一行仅有一个偶数 n (0< n< 105)
第二行也仅有一个数, 0 表示wind先取数, 1 表示小杉 (lolanv) 先取数
第三行有 n 个数,是wind给出的一排数。这 n 个数的绝对值均不超过1e6
输出数据
对每组测试数据输出一行
表示在两人总是做出最优决策的情况下,最终的胜利者的名字,即 " wind" 或 " lolanv" (引号不输出)。
样例输入
2
2
1
1 3
2
0
1 3
样例输出
lolanv
wind
解题分析
整体思路
先取的人可以比较所有奇数位置数之和与所有偶数位置之和,哪个大就一直取相应的位置上的数…注意n为偶数
步骤说明
(1)开始时,假设A先取数,A可以在这n(n为偶数)个数字中,分别算出奇数位和偶数位上的数之和
(2)假设偶数位上数字之和最大,当取走第n位数之后,轮到了B取数字,这个时候只能取第一位或第n-1位;
1)B取第1位,下一次A取第2位
2)B取第n-1位,下一次A取第n-2(n-2为偶数)位
(3)依次类推,A取了偶数为之后,B只能取奇数位;当B取了奇数位m后,A在最优策略下,要取紧挨着B取的奇数位的下一位m+1(偶数位),这样可以按照之前计算的偶数位上的数字之和最大的方向取得最后的胜利
举例说明
6 1000 564 48 400 2
奇数位置和:6+564+400=970
偶数位置和:1000+48+2=1050>970
故先去的人可以先取2 后取的必定在奇数位置上取数(他只能取奇数位置的了)
PS:先取的不一定是当前最优
代码
if __name__ == "__main__":
groups = int(input())
for i in range(groups):
n = int(input())
who = int(input())
array = list(map(int, input().split()))
if who == 0:
print("wind")
else:
print("lolanv")