就枚举四种情况,哪种能行就是yes了。很简单,关键是写法,我写的又丑又长。。。看了zhanyl的写法顿时心生敬佩。写的干净利落,简直美如画。。。这是功力的体现!

以下是zhanyl的写法,转载在此以供学习:

#include <vector>
#include <list>
#include <queue>
#include <map>
#include <set>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <cstring>
#include <tr1/unordered_set>
#include <tr1/unordered_map> using namespace std;
using namespace tr1; const int g[][]={{,},{,-},{-,},{-,-}}; long long n,k,d[],f[];
int t;
bool ans; int main(){
scanf("%d",&t);
while(t--){
scanf("%I64d%I64d%I64d%I64d",&n,&k,&d[],&d[]);
if(n%){
puts("no");
continue;
}
n=n/;
ans=false;
for(int i=;i<;i++)
if((k-g[i][]*d[]-g[i][]*d[])%==){
f[]=(k-g[i][]*d[]-g[i][]*d[])/;
f[]=f[]+g[i][]*d[];
f[]=f[]+g[i][]*d[];
if(f[]>=&&f[]>=&&f[]>=&&f[]<=n&&f[]<=n&&f[]<=n)ans=true;
}
if(ans)puts("yes");
else puts("no");
}
return ;
}
05-23 06:32