pat advanced 1139. First Contact (30)

题目链接

  1. 解法暴力
  2. 因为有 0000, -0000 这样的数据,所以用字符串处理
  3. 同性的时候,遍历好朋友时会直接遍历到对方,这个时候应该continue
#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
#include<vector>
#include<algorithm>
#include<unordered_map>
#include<unordered_set>
using namespace std;
//解法暴力
//因为有 0000, -0000 这样的数据,所以用字符串处理
//同性的时候,遍历好朋友时会直接遍历到对方,这个时候应该continue


int n, m;
unordered_map<string, unordered_set<string>> relations;

bool is_same_gender(string id1, string id2)
{
	if ((id1[0] == '-' && id2[0] == '-') || (id1[0] != '-' && id2[0] != '-')) return true;
	return false;
}

struct result
{
	string id1;
	string id2;
	result(string _x, string _y)
	{
		if (_x[0] == '-') id1 = _x.substr(1);
		else id1 = _x;
		if (_y[0] == '-') id2 = _y.substr(1);
		else id2 = _y;
	}
	void print()
	{
		cout << id1 << " " << id2 << endl;
	}
	bool operator<(const result&r)const
	{
		return id1 == r.id1 ? id2 < r.id2: id1 < r.id1 ;
	}
};

int main()
{
	while (scanf("%d %d", &n, &m) != EOF)
	{
		char id1[6], id2[6];

		relations.clear();
		while (m--)
		{
			scanf("%s %s", id1, id2);
			relations[id1].insert(id2);
			relations[id2].insert(id1);
		}

		int q;
		scanf("%d", &q);
		while (q--)
		{
			vector<result> res; res.clear();
			scanf("%s %s", id1, id2);
			for (unordered_set<string>::iterator i = relations[id1].begin(); i != relations[id1].end(); i++)
			{
				if (!is_same_gender(id1, (*i)) || (*i) == string(id2)) continue;
				for (unordered_set<string>::iterator j = relations[id2].begin(); j != relations[id2].end(); j++)
				{
					if (!is_same_gender(id2, (*j)) || (*j) == string(id1)) continue;
					if (relations[(*i)].find(*j) != relations[(*i)].end())
					{
						res.push_back(result((*i), (*j)));
					}
				}
			}
			 
			sort(res.begin(), res.end());
			printf("%d\n", res.size());
			for (int i = 0; i < res.size(); i++)
				res[i].print();
		}
	}

    return 0;
}

posted on   炮二平五  阅读(202)  评论(0编辑  收藏  举报

编辑推荐:
· .NET 依赖注入中的 Captive Dependency
· .NET Core 对象分配(Alloc)底层原理浅谈
· 聊一聊 C#异步 任务延续的三种底层玩法
· 敏捷开发:如何高效开每日站会
· 为什么 .NET8线程池 容易引发线程饥饿
阅读排行:
· 一个适用于 .NET 的开源整洁架构项目模板
· API 风格选对了,文档写好了,项目就成功了一半!
· 【开源】C#上位机必备高效数据转换助手
· .NET 9.0 使用 Vulkan API 编写跨平台图形应用
· MyBatis中的 10 个宝藏技巧!

导航

< 2025年1月 >
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 1
2 3 4 5 6 7 8
点击右上角即可分享
微信分享提示