洛谷題單指南-集合-P3405 [USACO16DEC] Cities and States S

江城伍月發表於2024-03-20

原題連結: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;
}

相關文章