题目描述
有三只球队,每只球队编号分别为球队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”
N = int(input()) for i in range(N): ary = list(map(int,input().split())) n,k,d1,d2 = ary[0],ary[1],ary[2],ary[3] diff = n - k r1 = diff - (d1 + d2) - d2 r1x = k - d1 - (d1 + d2) r2 = diff - d1 - d2 r2x = k - (d1 - d2) - d1 if d1 >= d2 else k - (d2 - d1) - d2 r3 = diff - d1 - (d1 - d2) if d1 >= d2 else diff - d2 - (d2 - d1) r3x = k - (d1 + d2) r4 = diff - d1 - (d1 + d2) r4x = k - (d1 + d2) - d2 #1. 球队1 <= 球队2 <= 球队3 if r1 >= 0 and r1 % 3 == 0 and r1x >= 0 and r1x % 3 == 0: print('yes') #2. 球队1 <= 球队2 >= 球队3 elif r2 >= 0 and r2 % 3 == 0 and r2x >= 0 and r2x % 3 == 0: print('yes') #3. 球队1 >= 球队2 <= 球队3 elif r3 >= 0 and r3 % 3 == 0 and r3x >= 0 and r3x % 3 == 0 : print('yes') #4. 球队1 >= 球队2 >= 球队3 elif r4 >= 0 and r4 % 3 == 0 and r4x >= 0 and r4x % 3 == 0: print('yes') else: print('no')
这题逻辑性很强,稍有不慎就可能出错。
要判断已经完成的比赛数的特征和剩余比赛数的特征,并分四种情况分别计算。
我感觉这道题目的描述不是很清楚,对于标红的那句描述:“已知球队1和球队2的比分相差d1分”而下面又给出条件“0 <= d1”,
我读到这句话后认为是:“球队2比球队1多d1分”。但是题目的实际意思却是:可能球队1比球队2多d1分,也可能球队2比球队1多d1分,需要分情况讨论。
至少这两种情况是不确定的,这就给答题者造成了不必要的干扰。所以这道题目,只能给个差评。