题意:有三个球队进行了N场比赛,其中K场已经比完了,但是你不知道结果。d1,d2是各自胜场的绝对值,比如一队和二队胜场差是d1,二队和三队胜场差是d2.问比完所有N场比赛是否存在各自都打平了。
题解:根据他们的两个胜场差d1,d2可以求出他们各自的胜场。但是因为d1,d2是绝对值,所以我们有四种情况需要考虑,比如(+d1,+d2).(+d1,-d2),(-d1,+d2),(-d1,-d2)判断他们是否符合已踢完K场的条件,是否剩下的场数能够使他们打平。嗯,就是这样,注意这几个条件如何去判断即可。
#include <bits/stdc++.h>
using namespace std;
#define LL __int64
int main()
{
LL n,m,d1,d2,T;
scanf("%I64d",&T);
while (T--)
{
scanf("%I64d %I64d %I64d %I64d",&n,&m,&d1,&d2);
// cout<<d1<<d2<<endl;
LL s,d,s1,s2,s3,D1,D2,d3,k=n-m;
d=m-(d1+d2+d2);
s=k-2*d1-d2;
D1=m-(d1+d2);
s1=k-(max(d1,d2)+abs(d1-d2));
D2=m-(max(d1,d2)+abs(d1-d2));
s2=k-(d1+d2);
d3=m-(2*d1+d2);
s3=k-d2*2-d1;
if ((s % 3==0 && s>=0) && (d>=0 && d % 3==0))
puts("yes");
else if ((s1 % 3==0 && s1>=0) && (D1>=0 && D1 % 3==0))
puts("yes");
else if ((s2 % 3==0 && s2>=0) && (D2>=0 && D2 % 3==0))
puts("yes");
else if ((s3 % 3==0 && s3>=0) && (d3>=0 && d3 % 3==0))
puts("yes");
else puts("no");
}
return 0;
}