#include #include #include #include #define READ_BUFSIZE ( 1024 ) #define READ_DELIMITER ( " " ) int count(char* pS, char c) { int count = 0; for (int i = 0; i < strlen(pS); i++) { if (pS[i] == c) count++; } return(count); } int hantei(int N, char ps[6][7]) { int K = count(ps[0], 'o'); if (K == N-1) return 1; int kachi[7] = { 0 }; for (int i = 1; i < N; i++) { kachi[count(ps[i], 'o')] = 1; } int jun = 0; for (int j = K+1; j <= 6; j++) { if (kachi[j] == 1) jun++; } return(++jun); } void simulate(int N, char ps[6][7], int team, int shiai, int &junni) { char p1[6][7] = { "" }; char p2[6][7] = { "" }; memcpy(p1, ps, 6 * 6); memcpy(p2, ps, 6 * 6); if (ps[team][shiai] == '-') { p1[team][shiai] = 'o'; p1[shiai][team] = 'x'; p2[team][shiai] = 'x'; p2[shiai][team] = 'o'; } if (shiai == N-1) { if (team == N-1) { //順位の判定をする int h = hantei(N, p1); if (h < junni) junni = h; h = hantei(N, p2); if (h < junni) junni = h; return; } shiai = 0; team++; } else shiai++; simulate(N, p1, team, shiai, junni); simulate(N, p2, team, shiai, junni); } int main(int argc, char *argv[]) { int N = 0; scanf("%d", &N); char s[6][7] = { "" }; int r[6][2] = { 0 }; //勝ち,残り for (int i = 0; i < N; i++) { scanf("%s", s[i]); } for (int j = 0; j < N; j++) { if (s[0][j] == '-') //K君未試合分 { s[0][j] = 'o'; //K君が勝ったことにする s[j][0] = 'x'; } } int junni = 6; simulate(N, s, 1, 0, junni); printf("%d\n", junni); return 0; }