Codeforces #258 (Div. 2) C. Predict Outcome of the Game

很简单的题,但是之前题目没说清楚

我一直以为第一名一定比第二名多赢d1局,因为这个跪了3次

后来题目补充说明才发现...

知道题意就很简单了,列出几个方程和不等式就行了

设最后每个队的分数为ave,第k场比赛后队伍一的分数为x

则可以得到下面四组不等式:


1、
三个队伍k场比赛后分数为:x, x-d1, x-d1-d2
3*x-2*d1-d2=k;
ave = n/3;
ave >= x;
x >= d1+d2;


2、
三个队伍k场比赛后分数为:x, x-d1, x-d1+d2
3*x-2*d1+d2=k;
ave = n/3;
ave >= x;
ave >= x-d1+d2;
x >= d1;

3、
三个队伍k场比赛后分数为:x, x+d1, x+d1-d2
3*x+2*d1-d2=k;
ave = n/3;
ave >= x+d1;
x+d1 >= d2;

4、
三个队伍k场比赛后分数为:x, x+d1, x+d1+d2
3*x+2*d1+d2=k;
ave = n/3;
ave >= x+d1+d2;

代码如下:

#include <cstdio>
#include <iostream>
#include <algorithm>
#define MAXN 10010
#define LL long long
using namespace std;

LL T, n, k, d1, d2, ave, x, ok;

bool judge1() {
    if(n%3==0 && (k+2*d1+d2)%3==0) {
        ave = n/3;
        x = (k+2*d1+d2)/3;
        if(ave>=x && x>=(d1+d2))
            return true;
    }
    return false;
}

bool judge2() {
    if(n%3==0 && (k+2*d1-d2)%3==0 && (k+2*d1-d2)>=0) {
        ave = n/3;
        x = (k+2*d1-d2)/3;
        if(ave>=x && x>=d1 && ave>=(x-d1+d2))
            return true;
    }
    return false;
}


bool judge3() {
    if(n%3==0 && (k-2*d1+d2)%3==0 && (k-2*d1+d2)>=0) {
        ave = n/3;
        x = (k-2*d1+d2)/3;
        if(ave>=(x+d1) && (x+d1)>=d2)
            return true;
    }
    return false;
}


bool judge4() {
    if(n%3==0 && (k-2*d1-d2)%3==0 && (k-2*d1-d2)>=0) {
        ave = n/3;
        x = (k-2*d1-d2)/3;
        if(ave>=(x+d1+d2))
            return true;
    }
    return false;
}

int main(void) {
    cin >> T;
    while(T--) {    
        cin >> n >> k >> d1 >> d2;
        if(judge1() || judge2() || judge3() || judge4())
            cout << "yes" << endl;
        else cout << "no" << endl;
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值