Hello大家好!很高兴我们又见面啦!给生活添点passion,开始今天的编程之路!
我的博客:<但凡.
我的专栏:《编程之路》、《数据结构与算法之美》、《题海拾贝》
欢迎点赞,关注!
1、题目
2、题解
这个题有两个很巧妙的地方,第一,对于一个城市名来说,咱们比较的只是这个城市名字的前两个字母,所以说咱们干脆只计算,考虑这两个字母,当用string输入以后用substr裁剪一下。另外注意啊,substr裁剪是不改变原字符串的,所以咱们得写成s=s.substr(0, 2);。
第二个比较巧妙的地方,就是咱们存储的时候把城市的前两个字符和州代号合成一个字符串来存储。需要注意的一点就是咱们不用先把所有的字符串都存进哈希表,再把反过来的字符串遍历一遍。如果这样做的话,咱们求得就不是对数了,而是对数*2。具体写法如下:
#include<iostream>
#include<string>
#include<unordered_map>
using namespace std;
typedef long long LL;
unordered_map<string,int> mp;
int ret;//对数
int main()
{
int line = 0;
cin >> line;
for (int i = 0;i < line;i++)
{
string s;string s1;
cin >> s >> s1;
s=s.substr(0, 2);//只要前两个字母
if (s == s1)
{
//如果s==s1,就算有匹配的上的,也是来自同一个州的
continue;
}
//注意
ret += mp[s1+s];
mp[s + s1]++;
}
cout << ret << endl;
return 0;
}
好了,今天的内容就分享到这,我们下期再见!