1139 First Contact (PAT甲级)

news/2024/12/5 12:00:57/

这道题柳婼有个很巧妙的方法,就是如果a和b是朋友(a, b都是四位数字id),那就把a * 10000 + b和b * 10000 + a都map到1,那就很容易判断两个人是否朋友了。

#include <cstdio>
#include <iostream>
#include <set>
#include <string>
#include <utility>
#include <vector>
const int MAXN = 10000;int N, M, K, a, b, u, v;
std::string s1, s2, src, dst;
std::set<int> sameGender[MAXN];
std::set<int> oppGender[MAXN];
std::vector<std::pair<int, int>> curr;int main(){scanf("%d %d", &N, &M);for(int i = 0; i < M; ++i){std::cin >> s1 >> s2;if(s1[0] == '-'){a = -1;u = std::stoi(s1.substr(1));} else{a = 1;u = std::stoi(s1);}if(s2[0] == '-'){b = -1;v = std::stoi(s2.substr(1));} else{b = 1;v = std::stoi(s2);}if(a * b > 0){sameGender[u].insert(v);sameGender[v].insert(u);} else{oppGender[u].insert(v);oppGender[v].insert(u);}}scanf("%d", &K);for(int i = 0; i < K; ++i){std::cin >> src >> dst;if(src[0] == '-'){a = -1;u = std::stoi(src.substr(1));} else{a = 1;u = std::stoi(src);}if(dst[0] == '-'){b = -1;v = std::stoi(dst.substr(1));} else{b = 1;v = std::stoi(dst);}curr.clear();if(a * b > 0){for(auto it1 = sameGender[u].begin(); it1 != sameGender[u].end(); ++it1){if(*it1 == v){continue;}for(auto it2 = sameGender[v].begin(); it2 != sameGender[v].end(); ++it2){if(*it2 == u){continue;}if(sameGender[*it1].find(*it2) != sameGender[*it1].end()){curr.push_back({*it1, *it2});}}}} else{for(auto it1 = sameGender[u].begin(); it1 != sameGender[u].end(); ++it1){if(*it1 == v){continue;}for(auto it2 = sameGender[v].begin(); it2 != sameGender[v].end(); ++it2){if(*it2 == u){continue;}if(oppGender[*it1].find(*it2) != oppGender[*it1].end()){curr.push_back({*it1, *it2});}}}}printf("%d\n", curr.size());for(int j = 0; j < curr.size(); ++j){printf("%04d %04d\n", curr[j].first, curr[j].second);}}return 0;
}

题目如下:

Unlike in nowadays, the way that boys and girls expressing their feelings of love was quite subtle in the early years. When a boy A had a crush on a girl B, he would usually not contact her directly in the first place. Instead, he might ask another boy C, one of his close friends, to ask another girl D, who was a friend of both B and C, to send a message to B -- quite a long shot, isn't it? Girls would do analogously.

Here given a network of friendship relations, you are supposed to help a boy or a girl to list all their friends who can possibly help them making the first contact.

Input Specification:

Each input file contains one test case. For each case, the first line gives two positive integers N (1 < N ≤300) and M, being the total number of people and the number of friendship relations, respectively. Then M lines follow, each gives a pair of friends. Here a person is represented by a 4-digit ID. To tell their genders, we use a negative sign to represent girls.

After the relations, a positive integer K (≤ 100) is given, which is the number of queries. Then K lines of queries follow, each gives a pair of lovers, separated by a space. It is assumed that the first one is having a crush on the second one.

Output Specification:

For each query, first print in a line the number of different pairs of friends they can find to help them, then in each line print the IDs of a pair of friends.

If the lovers A and B are of opposite genders, you must first print the friend of A who is of the same gender of A, then the friend of B, who is of the same gender of B. If they are of the same gender, then both friends must be in the same gender as theirs. It is guaranteed that each person has only one gender.

The friends must be printed in non-decreasing order of the first IDs, and for the same first ones, in increasing order of the seconds ones.

Sample Input:

10 18
-2001 1001
-2002 -2001
1004 1001
-2004 -2001
-2003 1005
1005 -2001
1001 -2003
1002 1001
1002 -2004
-2004 1001
1003 -2002
-2003 1003
1004 -2002
-2001 -2003
1001 1003
1003 -2001
1002 -2001
-2002 -2003
5
1001 -2001
-2003 1001
1005 -2001
-2002 -2004
1111 -2003

Sample Output:

4
1002 2004
1003 2002
1003 2003
1004 2002
4
2001 1002
2001 1003
2002 1003
2002 1004
0
1
2003 2001
0

http://www.ppmy.cn/news/83126.html

相关文章

盛元广通疾病预防控制中心检测管理信息系统

近些年&#xff0c;在疾病预防控制领域&#xff0c;公共卫生事件的发生都是通过信息化手段在日常工作中加以应用以及广泛深入的探索&#xff0c;加快疾控实验室信息化建设进程&#xff0c;可以有效把控不同类型检测任务中的每个节点&#xff0c;严防不同系统填报多次出现信息误…

YOLO V3 SPP ultralytics 第四节:YOLO V3 SPP网络的搭建

目录 1. 介绍 2. 代码介绍 2.1 create_modules 部分 2.1.1 不同层的处理 2.1.2 信息的融合 2.1.3 yolo 层的处理 2.2 get_yolo_layers 2.3 前向传播 3. 完整代码 1. 介绍 根据 上一节 解析的cfg文件&#xff0c;本章将配置文件cfg 搭建YOLO V3 SPP网络 本章的代码经过…

设计模式-简单例子理解适配器模式、装饰器模式

文章目录 一、适配器模式1. 要点2. Demo 二、装饰器模式1. 要点2. Demo 三、区别 本文参考&#xff1a; 基本原理&#xff1a;装饰器模式 | 菜鸟教程 (runoob.com) 基本原理&#xff1a;适配器模式 | 菜鸟教程 (runoob.com) 优缺点和区别&#xff0c;装饰模式&#xff1a;适配器…

Vue中的nextTick是用来做什么的,解决什么问题的-M

Vue中的nextTick是用来做什么的&#xff0c;解决什么问题的 Vue 的 nextTick 其本质是对 JavaScript 执行原理&#xff0c;时间循环机制 EventLoop 的一种应用。 $nextTick接收一个函数作为参数&#xff0c;在下一个时间片执行该函数的方法。或者说在浏览器初次加载或因为某些…

二叉排序树的查找、插入、删除

目录 二叉排序树的定义 二叉排序树的查找 二叉排序树的插入 二叉排序树的定义 二叉排序树的定义 二叉排序树&#xff08;Binary Sort Tree&#xff0c; BST&#xff09;&#xff0c;也称二叉查找树。 二叉排序树或者是一棵空树&#xff0c;或者是一棵具有下列特性的非空二叉…

Jmeter性能测试 -3数据驱动实战

什么是数据驱动&#xff1f; 从数据文件中读取测试数据&#xff0c;驱动测试过程的一种测试方法。数据驱动可以理解为更高级的参数化。 特点&#xff1a;测试数据与测试代码分离&#xff1b;数据控制过程 好处&#xff1a;降低开发和维护成本&#xff0c;减少代码量&#xf…

这6个超实用的图片素材网站,高清、免费,赶紧马住

推荐6个超实用的图片素材网站&#xff0c;高清无水印&#xff0c;绝对值得收藏&#xff01; 1、菜鸟图库 https://www.sucai999.com/pic.html#?vNTYxMjky 网站主要是为新手设计师提供免费素材的&#xff0c;素材的质量都很高&#xff0c;类别也很多&#xff0c;像平面、UI、…

通过Python的speech_recognition库将音频文件转为文字

文章目录 前言一、音频准备二、音频声音三、格式转换四、音频转文字1.引入库2.定义音频路径3.创建一个Recognizer对象4.打开音频文件&#xff0c;将音频文件读入Recognizer对象5.尝试使用Google Web API将语音转换为文字6.转换结果 总结 前言 大家好&#xff0c;我是空空star&a…