直接暴力可做。首先,利用一个二维数组,记录两人是否比赛。得到了丢失了一场比赛的两位选手a, b之后,按照输赢的传递性直接找有没有出现一个人c。使得 a 赢了 c, c 赢了 b 。有就输出a b,没有就b a。

附AC代码:

   1: #include <stdio.h>

   2: #include <iostream>

   3: #include <math.h>

   4: #include <stdlib.h>

   5: #include <string.h>

   6: #include <algorithm>

   7: #include <string>

   8: #include <vector>

   9:  

  10: using namespace std;

  11:  

  12: struct R

  13: {

  14:     int win, los;

  15: };

  16:  

  17: int main()

  18: {

  19:     int n, win, los;

  20:     int rec[59][59];

  21:     while(~scanf("%d", &n))

  22:     {

  23:         memset(rec, 0, sizeof(rec));

  24:         for (int i = 1; i < (n*(n-1)/2); i++)

  25:         {

  26:             scanf("%d%d", &win, &los);

  27:             rec[win][los] = 1;

  28:             rec[los][win] = -1;

  29:         }

  30:         R res;

  31:         bool flag = 1;

  32:         for (int i = 1; i <= n && flag; i++)

  33:         {

  34:             for (int j = 1; j <= n && flag; j++)

  35:             {

  36:                 if (i == j) continue;

  37:                 if (rec[i][j] == 0)

  38:                 {

  39:                     res.win = i;

  40:                     res.los = j;

  41:                     flag = 0;

  42:                 }

  43:             }

  44:         }

  45:         flag = 1;

  46:         for (int i = 1; i <= n && flag; i++)

  47:         {

  48:             if (rec[res.win][i] == 1 && rec[i][res.los] == 1)

  49:             {

  50:                 printf("%d %d\n", res.win, res.los);

  51:                 flag = 0;

  52:             }

  53:         }

  54:         if (flag)

  55:             printf("%d %d\n", res.los, res.win);

  56:     }

  57:     return 0;

  58: }

05-13 11:35