Bootstrap

洛谷P3405

洛谷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!

;