Problem L. World Cup

题目大意:有A,B,C,D四个队伍,两两之间有一个比赛,假如A和B比赛,如果平局,各加一分,如果说A胜,给A加3分,不给B加分,B胜同理

给出A,B,C,D,的得分,判断形成这种局面有多少种方式。

思路 DFS,,枚举每3种情况,赢输平局。

#include<bits/stdc++.h>
using namespace std;
int d[10][3]={{1,2},{1,3},{1,4},{2,3},{2,4},{3,4}};
int t[10][10][10][10] ;
int arr[100+10];
void dfs(int x){
    if(x==6) {
        t[arr[1]][arr[2]][arr[3]][arr[4]]++;
        return ;
    }
    for(int i=1;i<=3;i++){
        if(i==1){
            arr[d[x][0]]++;
            arr[d[x][1]]++; 
                dfs(x+1); 
             arr[d[x][0]]--;
            arr[d[x][1]]--;
        }
    
        else if(i==2){
            arr[d[x][0]]+=3;
            dfs(x+1);
            arr[d[x][0]]-=3;
        }
        else {
            arr[d[x][1]]+=3;
            dfs(x+1);
            arr[d[x][1]]-=3;
        }
    }
}

void solve(int xx){
    int a,b,c,d;
    cin>>a>>b>>c>>d; 
    printf("Case #%d: ",xx);
    if(a>=10||b>=10||c>=10||d>=10)    puts("Wrong Scoreboard");
    else if(t[a][b][c][d]==1) puts("Yes");
    else if(t[a][b][c][d]==0) puts("Wrong Scoreboard");
    else  puts("No");
}
int main(){
    dfs(0);
    int t;
    cin>>t;
    for(int i=1;i<=t;i++) solve(i);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/Accepting/p/11625771.html