题目:
分析:自己想了想貌似不需要图,第一想法就是map,瞄了一下题解,是map,自己继续想吧。
呵呵,看题解吧:
#include<bits/stdc++.h>
using namespace std;
map<string,string> m1;
map<string,vector<string> > m2;
vector<string> vs;
int main()
{
int m;
cin>>m;
for(int i=0;i<m;i++)
{
string s1,s2;
cin>>s1>>s2;
m1[s1]=s2;
string s3=s1.substr(0,2);
m2[s3].push_back(s1);
vs.push_back(s1);
}
int ans=0;
for(int i=0;i<m;i++)
{
for(int j=0;j<m2[m1[vs[i]]].size();j++)
{
if(m1[m2[m1[vs[i]]][j]]==vs[i].substr(0,2)) ans++;
}
}
cout<<ans/2;
}
既然想到了结果应该除以2,那为什么没有考虑到其实只需要一遍遍历呢?
智力真的不行了吗,把问题抽出来思考的能力也太差了吧。
很简单的抽出来思考,自己竟然写的那么麻烦。。。。无语。
#include<bits/stdc++.h>
using namespace std;
map<int,int> mmp[100005];
int n,ans;
int main()
{
cin>>n;
for(int i=1;i<=n;i++){
string a,b;
cin>>a>>b;
int A=a[0]*26+a[1];
int B=b[0]*26+b[1];
if(A!=B) ans+=mmp[B][A];
mmp[A][B]++;
}
printf("%d",ans);
return 0;
}