题目大意:输入n,表示已知n组rankings,每组ranking包括五个小组(A、B、C、D和E)。定义distance为两个ranking之间,不同小组相对排名不同的个数的和。定义value为某个ranking跟n组rankings的distance的和。使得value最小的ranking称为median ranking。求每组输入的median rankin和value,n为0则终止。
解题思路:全排列五个小组的ranking组合,计算每个组合的value,找到最小的median ranking。全排列用递归的思想,第一层放A,第二层放B,第三层放C,第四层放D,第五层放E。计算distance时用一个数组记录组合中元素的相对顺序,算是小许优化。
代码如下:
1 #include <cstdio> 2 #include <cstring> 3 #include <climits> 4 5 const int LEN = 6; 6 const int MAXN = 101; 7 char strs[MAXN][LEN]; 8 char ans[LEN]; 9 char temp[LEN]; 10 int cor[LEN]; 11 int value; 12 int n; 13 14 void init() { 15 value = INT_MAX; 16 for (int i = 0; i < LEN; i++) { 17 temp[i] = '