1. 程式人生 > >Problem L. World Cup(2016China-Final)【暴力】

Problem L. World Cup(2016China-Final)【暴力】

source:題目連結

題意:這是2016 ACM-ICPC China-Final的L題,說4個隊踢單迴圈賽,贏得3分輸得0分平得1分,六場比賽下來會出現許多種分數情況,現在給一個分數情況,問這種分數情況可不可能出現,可能出現的話是否是唯一的?

思路:6層迴圈暴力列舉比賽情況,4維陣列儲存四個隊每個分數情況出現個數。

程式碼如下:

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

int table[11][11][11][11]; //用於記錄所有可能出現的比分情況中某種得分情況出現的次數

int main()
{
    int t,T,n,a,b,c,d,sa,sb,sc,sd;
    int score_p1[3]={3,0,1};
    int score_p2[3]={0,3,1};
    //清零
    memset(table,0,sizeof(table));
    //暴力列舉六場比賽情況
    for(int ab=0;ab<3;ab++)
    for(int ac=0;ac<3;ac++)
    for(int ad=0;ad<3;ad++)
    for(int bc=0;bc<3;bc++)
    for(int bd=0;bd<3;bd++)
    for(int cd=0;cd<3;cd++)
    {
        //計算每種情況下得分情況
        sa=score_p1[ab]+score_p1[ac]+score_p1[ad];
        sb=score_p2[ab]+score_p1[bc]+score_p1[bd];
        sc=score_p2[ac]+score_p2[bc]+score_p1[cd];
        sd=score_p2[ad]+score_p2[bd]+score_p2[cd];
        table[sa][sb][sc][sd]++;
    }

    scanf("%d",&T);
    for(t=1;t<=T;t++)
    {
        scanf("%d%d%d%d",&a,&b,&c,&d);
        switch(table[a][b][c][d])
        {
            case 0: printf("Case #%d: Wrong Scoreboard\n",t);break;
            case 1: printf("Case #%d: Yes\n",t);break;
            default:printf("Case #%d: No\n",t);break;
        }
    }
    return 0;
}