451C - Predict Outcome of the Game

来源:互联网 发布:矮人村庄mac 编辑:程序博客网 时间:2024/06/06 03:08

题目的大意是有三只球队,一共有n场比赛,然后现在进行了k场,你不知道输赢,只知道第一和第二的分数差是d1,第二和第三的分数差是d2,那么问你这样比赛是不是可能出现平局?注意每一场比赛没有平局。

做法是:你可以把所有的情况列出来判断是否有一种情况满足。

其实我觉得可以任意设一个赢了x场,然后分几种情况列出等式,判断是否满足条件,这样做的好处是什么呢?这样做就不用害怕某种考虑掉了,还有就是种类太多的情况。这样做判断就很简单了。


#include<iostream>using namespace std;#include<cstring>#include<stdio.h>#include<cmath>#include<algorithm>int main(){    int T;    __int64 n,k,d1,d2;    cin>>T;    while(T--)    {        scanf("%I64d%I64d%I64d%I64d",&n,&k,&d1,&d2);        if(n%3!=0){cout<<"no"<<endl;continue;}        n-=k;        __int64 num1=max(d1,d2);        __int64 num2=abs(d1-d2);        int sum=0;        double x;        x=(k+d1+d1+d2)/3.0;        if(x-d1>=0&&x-d1-d2>=0&&((__int64)x==x))        if((n-d2-2*d1>=0)&&((n-d2-2*d1)%3==0))sum=1;        x=(k+2*d1-d2)/3.0;        if(x-d1>=0&&x-d1+d2>=0&&((__int64)x==x))        if((n-num1-num2>=0&&(n-num1-num2)%3==0))sum=1;        x=(k+d2-2*d1)/3.0;        if(x>=0&&x+d1>=0&&x+d1-d2>=0&&((__int64)x==x))        if((n-d1-d2>=0)&&(n-d1-d2)%3==0)sum=1;        x=(k-2*d1-d2)/3.0;        if(x>=0&&x+d1>=0&&x+d1+d2>=0&&((__int64)x==x))        if((n-d1-2*d2>=0)&&((n-d1-2*d2)%3==0))sum=1;        if(sum==1)cout<<"yes"<<endl;        else cout<<"no"<<endl;    }    return 0;}

0 0
原创粉丝点击