洛谷题单指南-集合-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;
}