洛谷题单指南-集合-P3405 [USACO16DEC] Cities and States S

原题链接:https://www.luogu.com.cn/problem/P3405

题意解读:要找到特殊城市的对数,即城市名称前两个字母和另一个城市的州一样,城市的州和另一个城市的前两个字母一样,且州不相同。

解题思路:

定义map<string, int> h;

对于每一个城市,将"州+城市前两个字符"的个数存入map

同时在存入之前,需要判断"城市前两个字符+州"已存在的个数,即当前城市对应的特殊城市对数,累加结果

举例:

MIAMI FL
DALLAS TX
FLINT MI
CLEMSON SC
BOSTON MA
ORLANDO FL

对于 MIAMI FL,判断MIFL是否存在,不存在存入h["FLMI"]++

对于DALLAS TX,判断DAAS是否存在,不存在存入h["TXDA"]++

对于FLINT MI,判断FLMI是否存在,存在累加结果ans += h["FLMI"],说明找到了与FLINT MI匹配的特殊城市h["FLMI"]个

注意:

由于题意要求特殊城市州不能相同,因此在城市前两个字符与州相等时,不予考虑!

100分代码:

 

#include <bits/stdc++.h>
using namespace std;

map<string, int> h;

int n, ans;
string city, state;

int main()
{
    cin >> n;
    while(n--)
    {
        cin >> city >> state;
        city = city.substr(0, 2); //取城市前两个字符
        if(city != state) //如果城市前两个字符等于州编号,说明找到的对应城市的州与此相同,不符合要求
        {
            ans += h[city + state]; //找到h[city + state]个城市与当前城市配对
        }
        h[state + city.substr(0, 2)]++; //州+城市前两个字符对应的城市数+1
    }
    cout << ans;
    return 0;
}

 

posted @   五月江城  阅读(86)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
点击右上角即可分享
微信分享提示