题目:P3405 [USACO16DEC] Cities and States S - 洛谷
可以理解为字符串拼接。
问题1:城市名前两个字母如何提取? substr提取前两个字母。
问题2:如何判断这两个城市符合条件?对于两个城市,它们的前两个字母互为对方所在州的名称。也就是说,对于他们来讲,A城市名+A洲名 = B洲名+B城市名。相当于a+b = b+a。
问题3:如何记录符合条件的城市数量?由于a+b = b+a,所以,记下a+b时,把a+b入队。加上b+a的数量。
cpp
#include <iostream>
#include <unordered_map>
using namespace std;
unordered_map<string, int> mp;
int main()
{
int n; cin >> n;
int ret = 0;
for (int i = 1; i <= n; i++)
{
string a, b; cin >> a >> b;
a = a.substr(0, 2);
if (a == b) continue;
ret += mp[b+a];
mp[a+b]++;
}
cout << ret << endl;
return 0;
}