zoukankan      html  css  js  c++  java
  • HDU -2094产生冠军 (STL)

    Problem Description
    有一群人,打乒乓球比赛,两两捉对撕杀,每两个人之间最多打一场比赛。
    球赛的规则如下:
    如果A打败了B,B又打败了C,而A与C之间没有进行过比赛,那么就认定,A一定能打败C。
    如果A打败了B,B又打败了C,而且,C又打败了A,那么A、B、C三者都不可能成为冠军。
    根据这个规则,无需循环较量,或许就能确定冠军。你的任务就是面对一群比赛选手,在经过了若干场撕杀之后,确定是否已经实际上产生了冠军。

    Input
    输入含有一些选手群,每群选手都以一个整数n(n<1000)开头,后跟n对选手的比赛结果,比赛结果以一对选手名字(中间隔一空格)表示,前者战胜后者。如果n为0,则表示输入结束。

    Output
    对于每个选手群,若你判断出产生了冠军,则在一行中输出“Yes”,否则在一行中输出“No”。

    Sample Input
    3
    Alice Bob
    Smith John
    Alice Smith
    5
    a c
    c d
    d e
    b e
    a d
    0

    Sample Output
    Yes
    No
    题目链接
    WFU寒假训练<十二>
    考查容器
    思路1
    用map写,1代表胜利 2代表失败 循环一遍以后把数组所有值初始化为3 最后统计胜利的人数即可,若ans==1则输出 Yes,反之输入No。(AC代码)

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <map>
    #include <algorithm>
    using namespace std;
    map<string,int>m;
    int main()
    {
    	map<string,int> ::iterator it;
    	int n;
    	while(cin>>n&&n)
    	{
    		for(int i=0;i<n;i++)
    		{
    			string s1,s2;
    			cin>>s1;
    			if(m[s1]!=2)
    			  m[s1]=1;
    			cin>>s2;
    			m[s2]=2;
    		}
    		int ans=0;
    		for(it=m.begin();it!=m.end();it++)
    		  if(it->second==1)
    		    ans++;
    		if(ans==1)
    		  cout<<"Yes"<<endl;
    		else
    		  cout<<"No"<<endl;
    		for(it=m.begin();it!=m.end();it++)
    		  it->second=3;
    	}
    	return 0;
    }
    

    思路2
    用set写 开两个set s1,s2 s1存放比赛的总人数 s2存放 失败的人数 由于冠军只有一个,利用set的去重功能 最后判断s1.size()-s2.size是否等于1 等于一输出Yes 反之输出No,贴AC代码

    #include <cstdio>
    #include <iostream>
    #include <algorithm>
    #include <set>
    #include <map>
    using namespace std;
    int main()
    {
    	int n;
    	string s;
    	while(cin>>n&&n)
    	{
    		set<string> s1;
    		set<string> s2;
    		for(int i=1;i<=n;i++)
    		{
    			cin>>s;
    		    s1.insert(s);
    		    cin>>s;
    		    s1.insert(s);
    		    s2.insert(s);
    		}
    		if((s1.size()-s2.size())==1)
    		  cout<<"Yes"<<endl;
    		else
    		  cout<<"No"<<endl;
    	}
    	return 0;
    } 
    
  • 相关阅读:
    25、Base64
    24、AES RSA加密处理记录
    23、获取app所占据的内存
    22、DDMS(转载)
    21、HierarchyViewer使用记录
    kubernetes 操作 serviceaccounts
    删除dashboard
    数据库建库指定UTF-8和jdbc连接字符串
    apt 被卸载
    EasyReport报表工具部署
  • 原文地址:https://www.cnblogs.com/Hayasaka/p/14294340.html
Copyright © 2011-2022 走看看