[ICPC2016上海L] World Cup - 暴力

Description

有四支队伍参加比赛,两两对抗,总共要打6场比赛,给你四支队伍的最终得分,让你判断能否产生此种分数。如果能,是否唯一。赢一场,得3分,平一场,双方各得一分,败一场,得0分。

Solution

暴力枚举每种胜负情况即可

#include <bits/stdc++.h>
using namespace std;

int caseid = 0;

int ta, tb, tc, td;

bool check(int ab, int ac, int ad, int bc, int bd, int cd)
{
    int a = 0, b = 0, c = 0, d = 0;
    if (ab == 0)
        a++, b++;
    if (ab == 1)
        a += 3;
    if (ab == 2)
        b += 3;

    if (ac == 0)
        a++, c++;
    if (ac == 1)
        a += 3;
    if (ac == 2)
        c += 3;

    if (ad == 0)
        a++, d++;
    if (ad == 1)
        a += 3;
    if (ad == 2)
        d += 3;

    if (bc == 0)
        b++, c++;
    if (bc == 1)
        b += 3;
    if (bc == 2)
        c += 3;

    if (bd == 0)
        b++, d++;
    if (bd == 1)
        b += 3;
    if (bd == 2)
        d += 3;

    if (cd == 0)
        c++, d++;
    if (cd == 1)
        c += 3;
    if (cd == 2)
        d += 3;

    if (a == ta && b == tb && c == tc && d == td)
        return true;
    return false;
}

signed main()
{
    ios::sync_with_stdio(false);
    int t;
    cin >> t;
    while (t--)
    {
        cin >> ta >> tb >> tc >> td;
        int cnt = 0;
        for (int i = 0; i < 3; i++)
            for (int j = 0; j < 3; j++)
                for (int k = 0; k < 3; k++)
                    for (int l = 0; l < 3; l++)
                        for (int m = 0; m < 3; m++)
                            for (int n = 0; n < 3; n++)
                                cnt += check(i, j, k, l, m, n);
        ++caseid;
        cout << "Case #" << caseid << ": ";
        if (cnt == 0)
            cout << "Wrong Scoreboard" << endl;
        else if (cnt == 1)
            cout << "Yes" << endl;
        else if (cnt > 1)
            cout << "No" << endl;
    }
}

相关文章: