有三只球队,每只球队编号分别为球队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
输出例子1:
yes no
import java.util.Scanner;
public class Main {
static void isPossible(long n,long k,long d1,long d2) {
long i=d1;
long j=d2;
d1=Math.max(i, j);
d2=Math.min(i, j);
if(get_result(d1+d2,d1,0,n-k,k)||get_result(i,Math.abs(d1-d2),0,n-k,k)||get_result(d1+d2,d2,0,n-k,k)||get_result(d1,d2,0,n-k,k))
System.out.println("yes");
else
System.out.println("no");
}
static boolean get_result(long a,long b,long c,long r,long k) {
long s=r-(a-b)-(a-c);
if(s<0||s%3!=0||(a+b+c)>k||((a+b+c)<k&&(k-(a+b+c))%3!=0))
return false;
return true;
}
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
int t =sc.nextInt();
for(int i=0;i<t;i++){
long n=sc.nextLong();
long k=sc.nextLong();
long d1=sc.nextLong();
long d2=sc.nextLong();
isPossible(n,k,d1,d2);
}
}
}