B01:篮球联赛

描述

校篮球队每年都会举办“年级联赛”。篮球队的队员们将根据年级分为一年级、二年级、三年级和四年级4支队伍,参与角逐。

在年级联赛中,不同队伍两两之间比赛一场,胜者积1分,负者积0分(篮球比赛无平局)。最终队伍将按照积分从高到低排名,若出现同分,则年级较低的排名靠前。

现在年级联赛正在进行中,有些比赛已经结束,有些比赛则因种种原因还未进行。请你根据当前的比赛情况,计算出一年级队在联赛结束后,有可能得到的最高名次。

输入输入包含多组数据。第一行是一个整数T(1 <= T <= 100),表示数据组数。

对于每组数据,用一个4*4的字符矩阵表示当前的比赛情况。第i行第j列表示i年级与j年级的比赛情况,其中:
“-”表示i与j相同,无比赛
“W”表示i年级胜j年级
“L”表示i年级负j年级
“?”表示i年级和j年级的比赛还未进行

输入

数据保证正确不存在矛盾,且无多余空格或空行。

输出

对于每组数据,输出一个整数,即一年级队在联赛结束后,有可能获得的最高名次。

样例输入

2
-LL?
W-L?
WW-L
??W-
-WL?
L-?L
W?-L
?WW-

样例输出

3
1
 1 #include <cstdio>
 2 #include <string>
 3 #include <memory>
 4 #include <algorithm>
 5 #include <stdlib.h>
 6 #include <math.h>
 7 #include <iostream>
 8 using namespace std;
 9 
10 int main()
11 {
12     int t;
13     scanf("%d", &t);
14     while (t--) {
15         char info[5][5];
16         int point[5] = { 0 };
17         for (int i = 1; i <= 4; i++)
18             for (int j = 1; j <= 4; j++)
19             {
20                 cin >> info[i][j];
21                 if (j > i)
22                 {
23                     if (info[i][j] == 'W')
24                         point[i]++;
25                     else if (info[i][j] == 'L')
26                         point[j]++;
27                 }
28             }
29         int notdefined[4][3],h=1;
30         for(int i=1;i<=3;i++)
31             for(int j=i+1;j<=4;j++)
32                 if (info[i][j] == '?') {
33                     if (i == 1)
34                         point[1]++;
35                     else if (point[i] > point[1])
36                         point[i]++;
37                     else if (point[j] > point[1])
38                         point[j]++;
39                     else
40                         notdefined[h][0] = i,notdefined[h][1]=j,notdefined[h++][2]=0;
41                 }
42         int _point[5], ans = 4;
43         for (int i = 1; i <=1<<(h-1); i++) {
44             int tmp = 1;
45             notdefined[1][2]++;
46             while (notdefined[tmp][2] > 1) {
47                 notdefined[tmp][2] = 0;
48                 tmp++;
49                 notdefined[tmp][2]++;
50             }
51             for (int j = 1; j <= 4; j++)
52                 _point[j] = point[j];
53             for (int j = 1; j <= h - 1; j++) {
54                 if (notdefined[j][2] == 1)
55                     _point[notdefined[j][0]]++;
56                 else
57                     _point[notdefined[j][1]]++;
58             }
59             int _ans = 1;
60             for (int i = 2; i <= 4; i++)
61                 if (_point[i] > _point[1])
62                     _ans++;
63             ans = min(_ans, ans);
64         }
65         printf("%d\n", ans);
66     }
67     return 0;
68 }
View Code

相关文章: