- 题目描述:
-
有一群人,打乒乓球比赛,两两捉对撕杀,每两个人之间最多打一场比赛。
球赛的规则如下:
如果A打败了B,B又打败了C,而A与C之间没有进行过比赛,那么就认定,A一定能打败C。
如果A打败了B,B又打败了C,而且,C又打败了A,那么A、B、C三者都不可能成为冠军。
根据这个规则,无需循环较量,或许就能确定冠军。你的任务就是面对一群比赛选手,在经过了若干场撕杀之后,确定是否已经实际上产生了冠军。
- 输入:
-
输入含有一些选手群,每群选手都以一个整数n(n<1000)开头,后跟n对选手的比赛结果,比赛结果以一对选手名字(中间隔一空格)表示,前者战胜后者。如果n为0,则表示输入结束。
- 输出:
-
对于每个选手群,若你判断出产生了冠军,则在一行中输出“Yes”,否则在一行中输出“No”。
- 样例输入:
-
3 Alice Bob Smith John Alice Smith 5 a c c d d e b e a d 0
- 样例输出:
-
Yes No
分析:本题使用STL中的map,根据题意可知,前者一定是打败后者,用map<string,int>string作关键字,int是value也就是第二数据。例如输入数据为a b,那么a一定打败b。操作步骤如下:
1、当前map中不存在a,那么将a添加进去,并设置map[a]=1;表示获胜。如果map里已经存在a了,那么要判断一下map[a]的值,如果map[a]的值为0,表示a曾经已经输了,也就是说a不可能成为冠军了,就不用修改其值。如果为1,保持不变。
2、对于b来说,b表示失败,只需将map[b]设置为0即可。
3、最后统计一下,map里面值为1的元素的个数,如果只有一个,表示冠军存在;其余情况表示不存在。#include "stdafx.h" #include <string> #include <iostream> #include <stdio.h> #include <map> #include <iterator> using namespace std; //string到int的映射map //string是关键字 map<string, int> Mp; int in[2002]; int main() { int n; while (scanf("%d", &n) != EOF && n != 0) { for (int i = 0; i < 2 * n; i++) { in[i] = 0; } Mp.clear(); int idx = 0; for (int i = 0; i < n; i++) { char str1[50], str2[50]; scanf("%s%s", str1, str2); string a = str1; string b = str2; int idxa, idxb; if (Mp.find(a) == Mp.end()) { Mp[a] = 1; } else { if (Mp[a]==0) Mp[a] = 0; } if (Mp.find(b) == Mp.end()) { Mp[b] = 0; } else { Mp[b] = 0; } } map<string, int>::iterator it; int count = 0; for (it = Mp.begin(); it != Mp.end(); it++) { if (it->second == 1) { count++; cout << it->first << ' ' << it->second << endl; } } if (count == 1) cout << "Yes" << endl; else cout << "No" << endl; } return 0; }
写代码是一种艺术,甚于蒙娜丽莎的微笑。
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合终身会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 聊一聊 Linux 上对函数进行 hook 的两种方式
· C# 锁机制全景与高效实践:从 Monitor 到 .NET 9 全新 Lock
· 一则复杂 SQL 改写后有感
· golang中写个字符串遍历谁不会?且看我如何提升 50 倍
· C# 代码如何影响 CPU 缓存速度?
· 提升Avalonia UI质感,跨平台图标库选型实践
· 突发,CSDN 崩了!程序员们开始慌了?
· 一个基于 .NET 8 + Ant Design Blazor 开发的简洁现代后台管理框架
· AppBox拖拽设计增删改查用户界面
· AI大模型应用开发入门-LangChain开发Agent