原题链接:http://codeforces.com/problemset/problem/1294/A
题意:你有n枚硬币,你现在使得另外三人所拥有的硬币相同,他们的初始硬币为a,b,c。求是否可以达成任务?
解题思路:注意另外三人之间拥有的硬币是不能交换的,只有你才可以给予硬币,而且必须要给完,那么我们可以找到其中最大的那个,然后先使得他们的硬币数量都相同,然后再平分剩下的硬币,看看是否可行。
AC代码:
/*
*/
//低版本G++编译器不支持,若使用这种G++编译器此段应注释掉
//i为循环变量,a为初始值,n为界限值,递增
//i为循环变量, a为初始值,n为界限值,递减。
using namespace std;
const int inf = 0x3f3f3f3f;//无穷大
const int maxn = 1e5;//最大值。
typedef long long ll;
typedef long double ld;
typedef pair<ll, ll> pll;
typedef pair<int, int> pii;
//*******************************分割线,以上为代码自定义代码模板***************************************//
int Max(int a,int b,int c){
int temp1=max(a,b);
int temp2=max(temp1,c);
return temp2;
}
int main(){
//freopen("in.txt", "r", stdin);//提交的时候要注释掉
ios::sync_with_stdio(false);//打消iostream中输入输出缓存,节省时间。
cin.tie(0); cout.tie(0);//可以通过tie(0)(0表示NULL)来解除cin与cout的绑定,进一步加快执行效率。
int t,a,b,c,n;
int temp;
while(cin>>t){
while(t--){
cin>>a>>b>>c>>n;
temp=Max(a,b,c);
n=n-(temp*3-a-b-c);
if(n>=0){
if(n%3)
cout<<"NO"<<endl;
else
cout<<"YES"<<endl;
}
else
cout<<"NO"<<endl;
}
}
return 0;
}