Skip to content

Instantly share code, notes, and snippets.

@tamimcsedu19
Created August 6, 2014 17:23
Show Gist options
  • Save tamimcsedu19/4e6fab8aa3796ea39362 to your computer and use it in GitHub Desktop.
Save tamimcsedu19/4e6fab8aa3796ea39362 to your computer and use it in GitHub Desktop.
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
vector<ll> binary_search(ll k,ll d1,ll d2,ll a,ll b)
{
ll lo = 0,hi = k+1;
while(lo<hi)
{
ll mid = (lo+hi)/2;
ll x = mid+(a*d1);
ll y = mid;
ll z = mid+(b*d2);
if(x>=0 && y>=0 && z>=0 && (x+y+z) == k)
return vector<ll>({x,y,z});
else if(x<0 || y<0 || z<0 || (x+y+z)<k)
lo = mid+1;
else
hi = mid;
}
return vector<ll>({-1000});
}
bool check(vector<ll> A,ll n)
{
sort(A.begin(),A.end());
// cout<<A[0]<<" "<<A[1]<<" "<<A[2]<<endl;
n-=(A[2]-A[0]);
n-=(A[2]-A[1]);
return n>=0 && (n%3==0);
}
int main()
{
ll t;
cin>>t;
while(t--)
{
ll n,k,d1,d2;
cin>>n>>k>>d1>>d2;
vector<ll> A = bin_s(k,d1,d2,1,1);
if((A.size() == 3) && check(A,n-k))
{
cout<<"yes"<<endl;
continue;
}
A = bin_s(k,d1,d2,-1,1);
if((A.size() == 3) && check(A,n-k))
{
cout<<"yes"<<endl;
continue;
}
A = bin_s(k,d1,d2,1,-1);
if((A.size() == 3) && check(A,n-k))
{
cout<<"yes"<<endl;
continue;
}
A = bin_s(k,d1,d2,-1,-1);
if((A.size() == 3) && check(A,n-k))
{
cout<<"yes"<<endl;
continue;
}
cout<<"no"<<endl;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment