BNUOJ 14407 friends or not 水题写得bug很多

 

期间犯的错误:

1.没看清题意,0<Tj-Ti

2.char a[]="aa";char b[]="aa"; if(a==b){} 这个循环跳不进去的,

  即直接通过比较字符串指针来比较两个字符串是否相等

3.pair <a,b > 与   pair<b,a> 是不同的

4.用map的类型是map<pair<char *,char *>,int> 再调用find函数即犯了第二个错误

5.之后改了string类型的,struct里面忘记改了,长期使用printf,都忘记用cout输出string了

 

 

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <map>
#include <string>
using namespace std;
struct obj
{
	string first;
	string second;
	int t;
}a[1200];
int ans[1200];
int vis[1200];
map<pair<string,string>,int>m;
int n,d;
int main ()
{
	while(scanf("%d%d",&n,&d)!=EOF)
	{
		for(int i=1;i<=n;++i)
			cin>>a[i].first>>a[i].second>>a[i].t;
		m.clear();int ans_cnt=0;
		memset(vis,0,sizeof(vis));
		for(int i=1;i<=n;++i)
		{
			if(vis[i]) continue;
			for(int j=i+1;j<=n;++j)
			{
				if(a[j].t==a[i].t) 
					continue;
				if(a[j].t-a[i].t>d)
					break;
				if(vis[j]) continue;
				if(a[j].second==a[i].first&&a[j].first==a[i].second)
				{
					if(m.find(make_pair(a[i].first,a[i].second))==m.end()&&m.find(make_pair(a[i].second,a[i].first))==m.end())
					{
						m[make_pair(a[i].first,a[i].second)]=1;
						ans[++ans_cnt]=i;
						vis[i]=vis[j]=1;
					}
				}
			}
		}
		printf("%d\n",ans_cnt);
		for(int i=1;i<=ans_cnt;++i)
			cout<<a[ans[i]].first<<" "<<a[ans[i]].second<<endl;;

	}
	return 0;
}


 

你可能感兴趣的:(String,struct,pair)