YunYan

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

题目大意:有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;
}

 

posted on 2019-10-05 21:08  Target--fly  阅读(167)  评论(0编辑  收藏  举报