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