描述
有三只球队,每只球队编号分别为球队1,球队2,球队3,这三只球队一共需要进行 n 场比赛。现在已经踢完了k场比赛,每场比赛不能打平,踢赢一场比赛得一分,输了不得分不减分。已知球队1和球队2的比分相差d1分,球队2和球队3的比分相差d2分,每场比赛可以任意选择两只队伍进行。求如果打完最后的 (n-k) 场比赛,有没有可能三只球队的分数打平。
输入描述:
第一行包含一个数字 t (1 <= t <= 10)
接下来的t行每行包括四个数字 n, k, d1, d2(1 <= n <= 10^12; 0 <= k <= n, 0 <= d1, d2 <= k)
输出描述:
每行的比分数据,最终三只球队若能够打平,则输出“yes”,否则输出“no”
示例1
输入:
2 3 3 0 0 3 3 3 3
输出:
yes no
说明:
case1: 球队1和球队2 差0分,球队2 和球队3也差0分,所以可能的赛得分是三只球队各得1分 case2: 球队1和球队2差3分,球队2和球队3差3分,所以可能的得分是 球队1得0分,球队2得3分, 球队3 得0分,比赛已经全部结束因此最终不能打平。
代码
t = input() # read line1
for i in range(int(t)):
a = list(map(int, input().split()))
n, k, d1, d2 = a[0], a[1], a[2], a[3]
remain = n - k
# 情况1,球队1 <= 球队2 <= 球队3
if d1 + d2 + d2 <= remain and (remain - (d1 + d2 + d2)) % 3 ==0 and d1 + d2 <= n/3 and (n - 3 * (d1 + d2)) % 3 == 0:
print("yes")
# 情况2,球队1 >= 球队2 >= 球队3
elif d1 + d2 + d1 <= remain and (remain - (d1 + d2 + d1)) % 3 ==0 and d1 + d2 <= n/3 and (n - 3 * (d1 + d2)) % 3 == 0:
print("yes")
# 情况3,球队1 <= 球队2 >= 球队3,d1 >= d2
elif d1 >= d2 and d1 + d2 <= remain and (remain - (d1 + d2)) % 3 == 0 and d1 <= n/3 and (n - 3 * d1) % 3 == 0:
print("yes")
# 情况4,球队1 <= 球队2 >= 球队3,d1 < d2
elif d1 <= d2 and d1 + d2 <= remain and (remain - (d1 + d2)) % 3 ==0 and d2 <= n/3 and (n - 3 * d2) % 3 == 0:
print("yes")
# 情况5,球队1 >= 球队2 <= 球队3,d1 >= d2
elif d1 >= d2 and d1 + d1 - d2 <= remain and (remain - (d1 + d1 - d2)) % 3 ==0 and d1 <= n/3 and (n - 3 * d1) % 3 == 0:
print("yes")
# 情况6,球队1 >= 球队2 <= 球队3,d1 <= d2
elif d1 <= d2 and d2 + d2 - d1 <= remain and (remain - (d2 + d2 - d1)) % 3 ==0 and d2 <= n/3 and (n - 3 * d2) % 3 == 0:
print("yes")
else:
print("no")