洛谷P3405
打眼一看,知道又要用map,脑中迅速构建好代码
#include<bits/stdc++.h>
using namespace std;
map<string,int>mp;
int main()
{
int n,ans=0;
string a,b,c[200005];
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
cin>>a>>b;
c[i]=a.substr(0,2);
mp[b]++;
}
for(int i=1;i<=n;i++)
{
if(mp[c[i]]==1)
{
ans++;
}
}
printf("%d",ans);
return 0;
}
审题,敲代码,提交,一气呵成!
结果……
10分!(其实本来就没太想好,样例过了赶紧提交碰碰运气)
可是怎么错了呢?
之前我把城市名和所在州分开考虑了,导致可能会有自己跟自己相同,使得ans变大!
发现这一点后,第一时间调整了算法
#include<bits/stdc++.h>
using namespace std;
map<string,int>mp;
int main()
{
int n,ans=0;
string a,b,c[200005];
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
cin>>a>>b;
a=a.substr(0,2);
if(a!=b)
{
ans+=mp[a+b];//把mp中a+b的一项加上
mp[b+a]++;//同时把mp中它的顺序反过来(符合题意)
}
}
printf("%d",ans);
return 0;
}
完美AC!