10.29训练赛第一场B题

题目大意:有n个队伍之间比赛,每两个队伍之间都有一场比赛,因此一共有n(n-1) / 2场比赛,但是这里丢失了一场比赛的记录,现在让你通过n(n-1) /2 -1场仍然存在的比赛记录来判断丢失的那条比赛记录 是什么。

解题报告:因为每两个队伍之间都有一场比赛,所以每个队伍都应该有n-1次比赛,所以只要统计存在 的记录里面各个队伍出现的次数就可以了,判断出现次数不足n-1次的两个队伍便是丢失记录上的那两个队伍。然后统计一下判断出来的这两个队伍的胜利的次数,次数多的说明也是这场比赛胜利的队伍。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<algorithm>
 5 #include<cmath>
 6 using namespace std;
 7 
 8 int A[55],B[55];
 9 
10 int main()
11 {
12     int n;
13     while(scanf("%d",&n)!=EOF)
14     {
15         int x,y,num = n * (n - 1) / 2 -1;
16         memset(A,0,sizeof(A));
17         memset(B,0,sizeof(B));
18         while(num--)
19         {
20             scanf("%d%d",&x,&y);
21             A[x]++;
22             B[y]++;
23         }
24         int ans[2],f = 0;
25         for(int i = 1;i <= n;++i)
26         {
27             if((A[i]+B[i]) < (n-1))
28             ans[f++] = i;
29             if(f == 2) break;
30         }
31         if(A[ans[0]] < A[ans[1]]) swap(ans[0],ans[1]);
32         printf("%d %d\n",ans[0],ans[1]);
33     }
34     return 0;    
35 }
View Code

 

posted @ 2013-11-02 21:47  xiaxiaosheng  阅读(182)  评论(0编辑  收藏  举报