这道题目比较简单~感觉是假的蓝题,用字符串hash将每个省和市计算出对应的数值,并将其标记,这里我们用map, 我们只需要关心城市前面两个字符,后面的都可以舍弃
但是题目中说了,两个配对的城市一定是要来自不同的省份,所以,城市前两个字符和省相同的话,我们不用考虑输入的这个城市和其他城市是是否有配对的~
就比如:
3
Migk Mi
Mirk Mi
Mirk Mi
如果不搞个特判就是3了,但是按照题目的要求这个应该是0
下面是AC代码~
#include <iostream>
#include <map>
#define Max 100000
using namespace std;
map<int ,int > res[Max];
int get_res(string str);
int main()
{
int n;
cin>>n;
string str1,str2;//分别代表省和市
int ans=0;
for(int i=1;i<=n;i++)
{
cin>>str1>>str2;
string str=str1.substr(0,2);
int x1=get_res(str);
int x2=get_res(str2);
if(res[x2][x1]!=0&&x1!=x2)
{
ans+=res[x2][x1];
}
res[x1][x2]++;
}
cout<<ans<<endl;
return 0;
}
int get_res(string str)
{
int t=0;
for(int i=0;i<str.size();i++)
{
t=t*100+str[i];//转换成hash
}
return t;
}