zoukankan      html  css  js  c++  java
  • 大家一起做训练 第一场 B Tournament

    题目来源: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代码:

       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
    ", res.win, res.los);
      51:                 flag = 0;
      52:             }
      53:         }
      54:         if (flag)
      55:             printf("%d %d
    ", res.los, res.win);
      56:     }
      57:     return 0;
      58: }
  • 相关阅读:
    蓝桥杯---打印回型嵌套(简单递归)
    蓝桥杯---分酒
    蓝桥杯---简单试题集锦
    蓝桥杯---黑洞数
    2013蓝桥杯B组 预赛试题
    2012蓝桥杯预赛--取球博弈
    2012第三届蓝桥杯预赛题
    C中的动态开辟(malloc)
    文件的输入输出
    hdoj 1233 还是畅通工程
  • 原文地址:https://www.cnblogs.com/wuhenqs/p/3399932.html
Copyright © 2011-2022 走看看