zoukankan      html  css  js  c++  java
  • UPC 朋友 + AtCoder ABC155 C Poll (map遍历 && 二维map)

    在这里记一下map的遍历~

    map<string,int>cnt;
    std::map<string,int>::iterator it;
    	 it=cnt.begin();
       	 while(it!=cnt.end()){
            maxx=max(maxx,it->second);
            it++;
        }
    

    也可以用C++11中的auto,超级好用~

    for(auto it=mp.begin();it!=mp.end;it++){
    	if(maxx==it->second)
    		cout<<it->first<<endl;
    }
    

    其中,it->first代表map的第一维元素,it->second代表第二维元素。

    接下来做两个水题吧~

    AtCoder ABC155 C Poll

    **题意:**找出现次数最多的单词,如有多个,按照字典序从小到大输出。
    **思路:**用一个map记录每个字符串的次数,遍历一遍即可~
    代码:

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1e6+7;
    map<string,int>mp;
    string s[maxn];
    std::map<string,int>::iterator it;
    bool cmp(string a,string b){
    	return a<b;
    }
    int main(){
    	int n;cin>>n;
    	for(int i=1;i<=n;i++){
    		cin>>s[i];
    		mp[s[i]]++;
    	}
    	it=mp.begin();
    	int maxx=-1;
    	while(it!=mp.end()){
    		maxx=max(maxx,it->second);
    		it++;
    	}
    	//cout<<maxx<<endl;
    	sort(s+1,s+1+n,cmp);
    	for(int i=1;i<=n;i++){
    		if(mp[s[i]]==maxx){
    			cout<<s[i]<<endl;
    			mp[s[i]]=0;
    		}
    	}
    	return 0;
    }
    
    

    UPC 朋友

    题目描述
    同学们应该学会多交一些好朋友。朋友关系是相互的,A 是 B 的好朋友,则 B 也是 A 的好朋友。朋友关系是不传递的,A 是 B 的好朋友,B 是 C 的好朋友,但 A 和 C 不一定是好朋友。现在给出某小学部分同学之间的朋友关系,请编程统计朋友最多的人有多少个好朋友。
    输入
    输入共m+1行。
    第1行是两个整数n和m,分别表示同学总人数和朋友关系对数。
    第2行到第m+1行,描述了m对朋友关系。每行两个用单个空格隔开的同学姓名。
    每个人的姓名仅由小写字母组成,且1≤姓名的长度≤10。
    输出
    输出共 1 行。
    一个整数,表示朋友最多的人有多少个好朋友。
    样例输入 Copy
    4 3
    lucy lily
    jam lily
    jam peter
    样例输出 Copy
    2
    提示
    4个人,3对朋友关系。lucy只有一个朋友lily;jam有两个朋友lily和peter;lily有两个朋友lucy和jam;
    peter只有一个朋友jam。
    所以lily和jam朋友最多,都是2个。
    50%以上的测试点输入数据保证朋友关系没有重复。
    100%的测试点输入数据保证2≤n≤100,1≤m≤1000,且没有自己跟自己的朋友关系。
    思路: 利用map模拟就行,要注意二维string map的使用
    代码:

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1e6+7;
    map<string,map<string,int> >mp;
    map<string,int>cnt;
    std::map<string,int>::iterator it;
    int main(){
        int n,m;
        string a,b;
        scanf("%d%d",&n,&m);
        while(m--){
            cin>>a>>b;
            if(!mp[a][b]){
                mp[a][b]=mp[b][a]=1;
                cnt[a]++;
                cnt[b]++;
            }
        }
        int maxx=-1;
        it=cnt.begin();
        while(it!=cnt.end()){
            maxx=max(maxx,it->second);
            it++;
        }
        printf("%d
    ",maxx);
        return 0;
    }
    

    还有学长的一种思路是将字符串转为数组下标 思维好强啊orz 传送门

    本来以为这个题是并查集,传送门~ 顺便复习一下并查集叭

  • 相关阅读:
    URAL 2046 A
    URAL 2056 Scholarship 水题
    Codeforces Gym 100286I iSharp 水题
    Codeforces Gym H. Hell on the Markets 贪心
    Codeforces Gym 100286G Giant Screen 水题
    Codeforces Gym 100286B Blind Walk DFS
    Codeforces Gym 100286F Problem F. Fibonacci System 数位DP
    Codeforces Gym 100286A. Aerodynamics 计算几何 求二维凸包面积
    Codeforces Gym 100418K Cards 暴力打表
    Codeforces Gym 100418J Lucky tickets 数位DP
  • 原文地址:https://www.cnblogs.com/OvOq/p/14853205.html
Copyright © 2011-2022 走看看