题目来源:CodeForce #27 B

有n个人比赛,两两之间都有一场比赛,一共 n * (n - 1) / 2 场比赛。每场比赛的记录方式是 a b,表示在a和b的比赛中,a胜出,b失败。

经过研究发现,输赢有传递性,例如:a赢了b,b赢了c,那么a一定会赢c。

现在,比赛记录发现丢了一场,请输出这一场的比赛记录。输出可能的结果中的一个就OK。

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

附AC代码:

#include <stdio.h>
#include <iostream>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
#include <string>
#include <vector>
   9:  
namespace std;
  11:  
struct R
  13: {
int win, los;
  15: };
  16:  
int main()
  18: {
int n, win, los;
int rec[59][59];
, &n))
  22:     {
sizeof(rec));
int i = 1; i < (n*(n-1)/2); i++)
  25:         {
, &win, &los);
  27:             rec[win][los] = 1;
  28:             rec[los][win] = -1;
  29:         }
  30:         R res;
bool flag = 1;
int i = 1; i <= n && flag; i++)
  33:         {
int j = 1; j <= n && flag; j++)
  35:             {
continue;
if (rec[i][j] == 0)
  38:                 {
  39:                     res.win = i;
  40:                     res.los = j;
  41:                     flag = 0;
  42:                 }
  43:             }
  44:         }
  45:         flag = 1;
int i = 1; i <= n && flag; i++)
  47:         {
if (rec[res.win][i] == 1 && rec[i][res.los] == 1)
  49:             {
, res.win, res.los);
  51:                 flag = 0;
  52:             }
  53:         }
if (flag)
, res.los, res.win);
  56:     }
return 0;
  58: }

相关文章:

  • 2021-04-06
  • 2022-12-23
  • 2022-12-23
  • 2022-03-06
  • 2022-02-06
  • 2021-05-18
  • 2021-11-28
  • 2021-05-31
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-17
  • 2022-02-06
相关资源
相似解决方案