当前位置:首页 > 洛谷 > 【洛谷1184题解析】用C++高效解决地点匹配问题(附代码与解题思路)

【洛谷1184题解析】用C++高效解决地点匹配问题(附代码与解题思路)

3个月前 (06-26)

【洛谷1184题解析】用C++高效解决地点匹配问题(附代码与解题思路) 洛谷 C++ 哈希表 第1张

一、题目解读

洛谷1184题要求处理一组地点列表与行程记录,统计其中匹配的天数。题目难点在于高效处理带有空格的字符串输入,以及快速判断每日行程是否在高手可去地点集合中。需要兼顾输入格式解析与算法效率。

二、解题思路

1. 哈希集合优化匹配:使用C++的unordered_set存储高手能去的地点,利用其O(1)平均查找时间提升效率。

2. 逐行输入处理:通过getline()读取包含空格的地点和行程,避免因空格导致输入错误。

3. 计数统计:遍历每日行程,在哈希集中查找匹配项,累计匹配天数。

三、解题步骤解析

1. 初始化与输入:

    禁用同步流提升输入速度(ios::sync_with_stdio(false))。

    读取n和m(地点数量与行程天数)。

    cin.ignore()清除第一行换行符,确保后续getline正确读取。

2. 存储高手可去地点:

    循环n次,逐行读取地点并插入unordered_set。

3. 匹配统计:

    循环m次,对每日行程进行查找,若存在于集合则计数+1。

4. 输出结果:直接输出匹配天数。

四、代码与注释

#include <iostream>
#include <unordered_set>
#include <string>
using namespace std;

int main() {
    ios::sync_with_stdio(false); // 禁用同步流加速输入
    cin.tie(nullptr);           // 解除cin与cout绑定

    int n, m;                  // 地点数量n与行程天数m
    cin >> n >> m;
    cin.ignore();              // 清除第一行换行符

    unordered_set<string> available; // 存储高手可去地点

    // 读取高手能去的地点(支持空格)
    for(int i = 0; i < n; ++i) {
        string place;
        getline(cin, place); // 按行读取
        available.insert(place); // 插入哈希集合
    }

    int count = 0;             // 匹配天数计数器

    // 遍历每日行程并统计匹配
    for(int i = 0; i < m; ++i) {
        string place;
        getline(cin, place);   // 读取行程地点
        if(available.find(place)!= available.end()) { // 哈希查找匹配
            ++count;
        }
    }

    cout << count << endl;     // 输出结果
    return 0;
}

五、总结

本解法通过哈希集合将地点匹配时间复杂度降至O(1),有效应对大规模数据。注意输入时的格式处理(如清除换行符)和unordered_set的应用,是解决此类字符串匹配问题的典型思路。可进一步优化空间复杂度或结合其他数据结构应对变体题目。

原创内容 转载请注明出处

分享给朋友:

相关文章

线性遍历+二进制 6行代码征服二进制链表转整数

线性遍历+二进制 6行代码征服二进制链表转整数

力扣1290.二进制链表转整数题目本质给定一个单链表的头节点head,链表中每个节点的值为0或1。链表表示一个‌最高有效位在前‌的二进制数字,要求将其转换为对应的十进制整数。例如链表1→0→1对应的二...

力扣1137题:动态规划解泰波那契数 高效求解第N项的秘密

力扣1137题:动态规划解泰波那契数 高效求解第N项的秘密

一:重新解读题目泰波那契数列是一个充满数学趣味的递推序列:从第3项开始,每个数均为前三个数的和(即Tₙ₊₃ = Tₙ + Tₙ₊₁ + Tₙ₊₂)。当给定整数n时,需要高效计算出第n项的值。面对此类递...

IOI 1994 洛谷1216:如何用O(1)空间解决数字三角形问题?附代码实现

IOI 1994 洛谷1216:如何用O(1)空间解决数字三角形问题?附代码实现

题目重解:数字三角形是一个经典的动态规划问题,给定一个由数字组成的三角形结构,从顶部出发,每次可以移动到下方相邻的数字,最终到达底部。我们需要找到一条路径,使得路径上经过的数字总和最大。这个问题可以很...

2025年GESP七级等价消除(洛谷P11965)代码解析与优化策略

2025年GESP七级等价消除(洛谷P11965)代码解析与优化策略

一、题目解读    2025年GESP七级考试中的“等价消除(洛谷P11965)”问题要求统计给定字符串中满足等价条件的子串数量。所谓“等价子串”,是指子串中所...

标题:洛谷B3617题解析:八进制转十六进制算法实现与优化(附AC100代码)

标题:洛谷B3617题解析:八进制转十六进制算法实现与优化(附AC100代码)

一、题目解读洛谷B3617题要求将输入的八进制字符串转换为十六进制表示。题目需处理大数场景,且对输入合法性有明确限制(长度不超过1000,仅包含0-7字符)。由于八进制与十六进制无法直接转换,需借助十...

牛客14496题解:括号最大深度问题(栈思想与代码优化)

牛客14496题解:括号最大深度问题(栈思想与代码优化)

一、题目解读牛客14496题要求计算给定括号字符串中的最大深度。例如,对于字符串 "(()())",最大深度为2。题目考察对括号嵌套结构的理解,以及如何通过编程找到最深嵌套层次。二...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。