洛谷题单指南-集合-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 @ 2024-03-20 17:51  五月江城  阅读(63)  评论(0编辑  收藏  举报