当前位置:网站首页>AcWing 1944. 记录保存(哈希,STL)

AcWing 1944. 记录保存(哈希,STL)

2022-06-11 10:58:00 柃歌

【题目描述】
农夫约翰一直在详细记录奶牛进入牛棚挤奶的情况。
每小时会有一组三头牛进入牛棚产奶,约翰会记录它们的名字。
例如,在 5 5 5小时内,他可能会记录下如下列表,每行对应进入牛棚的一组牛:

BESSIE ELSIE MATILDA
FRAN BESSIE INGRID
BESSIE ELSIE MATILDA
MATILDA INGRID FRAN
ELSIE BESSIE MATILDA

约翰发现同一组奶牛可能会多次出现在他记录的名单中,在上面的例子中,BESSIE ELSIE MATILDA这个组合出现了 3 3 3次(尽管约翰不一定每次都按同样的顺序记录它们的名字)。
请帮助约翰计算进入牛棚次数最多的一组牛的进入次数。

【输入格式】
第一行包含整数 N N N
接下来 N N N行,每行都包含一组三头牛的名字,每个名字都是一个长度在 1 ∼ 10 1\sim 10 110之间的由大写字母构成的字符串。

【输出格式】
输出进入牛棚次数最多的一组牛的进入次数。

【数据范围】
1 ≤ N ≤ 1000 1≤N≤1000 1N1000

【输入样例】

5
BESSIE ELSIE MATILDA
FRAN BESSIE INGRID
BESSIE ELSIE MATILDA
MATILDA INGRID FRAN
ELSIE BESSIE MATILDA

【输出样例】

3

【分析】


首先将每组字符串进行排序,那么不同顺序出现的同样的三个字符串排序后一定是唯一的序列,将这个序列存储在vector<string>中。然后我们使用map<vector<string>, int>统计每组序列出现的次数即可。


【代码】

#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <map>
using namespace std;

map<vector<string>, int> cnt;
int n, res;

int main()
{
    
    cin >> n;
    while (n--)
    {
    
        vector<string> str(3);
        for (int i = 0; i < 3; i++) cin >> str[i];
        sort(str.begin(), str.end());
        cnt[str]++;
    }
    for (auto &[k, v] : cnt) res = max(res, v);
    cout << res << endl;
    return 0;
}
原网站

版权声明
本文为[柃歌]所创,转载请带上原文链接,感谢
https://blog.csdn.net/m0_51755720/article/details/125231395