UPC 朋友 + AtCoder ABC155 C Poll (map遍历 && 二维map)

简介: 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\n",maxx);
    return 0;
}

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

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

目录
相关文章
go语言中遍历映射(map)
go语言中遍历映射(map)
295 8
Collection和Map的遍历方式
Collection和Map的遍历方式
112 0
|
6月前
|
存储 JavaScript 前端开发
for...of循环在遍历Set和Map时的注意事项有哪些?
for...of循环在遍历Set和Map时的注意事项有哪些?
318 121
|
6月前
|
安全 Java 数据库连接
让我们讲解一下 Map 集合遍历的方式
我是小假 期待与你的下一次相遇 ~
233 43
|
7月前
|
存储 安全 Go
Map的遍历与判断键是否存在-《Go语言实战指南》
本文介绍了 Go 语言中对 `map` 的常见操作,包括遍历所有项和判断键是否存在。通过 `for range` 可以遍历 `map` 的键值对、仅键或仅值(需忽略键)。注意,`map` 遍历顺序是随机的。判断键是否存在时,使用双赋值语法 `value, ok := map[key]`,其中 `ok` 表示键是否存在。直接访问不存在的键会返回类型的零值,可能导致逻辑错误。掌握这些机制可更安全高效地处理键值对数据。
使用 entrySet 遍历 Map 类集合 KV
使用 entrySet 遍历 Map 类集合 KV
|
12月前
|
Go
go语言for遍历映射(map)
go语言for遍历映射(map)
410 12
|
存储 Go
go语言 遍历映射(map)
go语言 遍历映射(map)
345 2
|
前端开发 小程序 Java
java基础:map遍历使用;java使用 Patten 和Matches 进行正则匹配;后端传到前端展示图片三种情况,并保存到手机
这篇文章介绍了Java中Map的遍历方法、使用Pattern和matches进行正则表达式匹配,以及后端向前端传输图片并保存到手机的三种情况。
177 1