首页 > 代码库 > Codeforces Round #258 (Div. 2)C(暴力枚举)

Codeforces Round #258 (Div. 2)C(暴力枚举)

就枚举四种情况,哪种能行就是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[4][2]={{1,1},{1,-1},{-1,1},{-1,-1}};long long n,k,d[2],f[3];int t;bool ans;int main(){    scanf("%d",&t);    while(t--){        scanf("%I64d%I64d%I64d%I64d",&n,&k,&d[0],&d[1]);        if(n%3){            puts("no");            continue;        }        n=n/3;        ans=false;        for(int i=0;i<4;i++)            if((k-g[i][0]*d[0]-g[i][1]*d[1])%3==0){                f[1]=(k-g[i][0]*d[0]-g[i][1]*d[1])/3;                f[0]=f[1]+g[i][0]*d[0];                f[2]=f[1]+g[i][1]*d[1];                if(f[0]>=0&&f[1]>=0&&f[2]>=0&&f[0]<=n&&f[1]<=n&&f[2]<=n)ans=true;            }        if(ans)puts("yes");        else puts("no");    }    return 0;}

 

Codeforces Round #258 (Div. 2)C(暴力枚举)