文章目录

  • 题目分析
  • 题目链接

题目分析



来源:acwing

题目分析:

图论模拟题。

给定暗恋的两个人A 和B,需要寻找一对C 和D ,满足:A和C是朋友,C和D是朋友,D和B是朋友。而且A、C同性别,B、D同性别。题目给的暗恋:可能是异性(男对女,或者女对男),也可能是同性暗恋同性。

数据不大,枚举即可。只要建好图标记好边g[N][N],然后直接暴力枚举即可

for(auto c :a的同性别阵营 )for(auto d : b的同性别阵营)if( c != a && c != b && d != a && d != b && g[a][c] && g[c][d] && g[d][b] )res.push_back({c , d});

题目的难点之一在于给定的不是数字,而是字符串,因为0000 和 -0000表示男生 和女生,不能单纯从数字上来看,所以用字符串来存,这样的话,需要做一个从字符串到数字的映射,需要使用hash表。输出的时候还需要输出字符串(不需要输出表示女生的负号),因此还需要数字和字符串的逆映射,需要不停地处理输入输出。

第二个难点是枚举的时候需要按照性别枚举,这时候男生和女生需要分别存

STL语法点补充:
下面使用了vector的去重,使用方法erase()uniue().

vector<int> boys;
boys.erase(  unique(boys.begin(),boys.end()),   boys.end() );

上面的代码是对数组boys进行删除重复元素。

还用到了STL中的hash table unordered_map<string,int > mp;实现从字符串到数字的映射。使用方法count()判断是否已经映射过。如果mp.count(x) == 0表示还没有映射过。

ac代码

#include<bits/stdc++.h>
using namespace std;
const int N =  310;int n, m;
bool g[N][N];
string num[N];
unordered_map<string,int > mp;
int id ;
vector<int> boys, girls;
int main(){cin >> n  >> m;while(m--){string  a, b;cin >> a >> b;string x =a ,y =b;if(x.size()==5) x =x.substr(1);if(y.size() ==5) y = y .substr(1);//没出现过,映射成全新的数if(mp.count(x) == 0) mp[x] = ++id,num[id] = x;//原来的编号是什么if(mp.count(y) == 0) mp[y] = ++id, num[id] = y;int px= mp[x] ,py = mp[y];//之间有边g[px][py] = g[py][px] = true;if(a[0] != '-') boys. push_back(px);else girls.push_back(px);if(b[0] != '-' ) boys. push_back(py);else girls.push_back(py);}sort(boys.begin(),boys.end());//删除重复元素boys.erase(unique(boys.begin(),boys.end()), boys.end());sort(girls.begin(),girls.end());//删除重复元素girls.erase(unique(girls.begin(),girls.end()), girls.end());int k ;cin >> k;//询问while(k--){vector<pair<string,string>> res; //存结果string  x, y;cin >> x   >> y;//判断是男孩还是女孩vector<int> p= boys, q = boys;if(x[0] == '-') p =girls, x = x. substr(1);if( y[0] == '-') q = girls, y = y.substr(1);int a = mp[x] ,b = mp[y];//图的遍历//找两个点for(int c: p)  //c从a的性别里找for(int d : q){ //d从b的性别里找if( c !=a && c !=b  &&  d!= a && d!= b && g[a][c] && g[c][d] && g[d][b])res.push_back({num[c],num[d]});}cout<< res.size()<<endl;sort(res.begin(),res.end());for( auto p :res ) cout << p.first <<" "<< p.second <<endl;}}

题目链接

PAT甲级1139 First Contact (30 分)

PAT甲级1139 First Contact (30 分):[C++题解] 图论、暴力枚举两个点、hash映射相关推荐

  1. PAT甲级1072 Gas Station (30 分):[C++题解]dijkstra算法、最短路

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析: 所有的dist[ ]都≤Ds:最小的dist[ ]最大; dist[ ] 总和最大. 由于加油站是字符,为了简单起见,将m个加油站编 ...

  2. PAT甲级1155 Heap Paths (30 分):[C++题解]堆、堆的遍历、树的遍历、dfs输出路径、完全二叉树建树

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 堆首先是完全二叉树,所以先建完全二叉树,由于给定的是层序遍历的数据,所以直接用数组即可,注意数组下标从1开始,这样便满足结点u和左儿 ...

  3. PAT甲级1107 Social Clusters (30 分):[C++题解]并查集,爱好、人数

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 凭爱好,分人群.注意点:爱好可传递.什么意思?意思是A和B的有共同爱好1, B和C有共同爱好2,那么认为A和C也是同一群人. 按照爱 ...

  4. PAT甲级1103 Integer Factorization (30 分):[C++题解]背包问题,DP解法

    文章目录 题目分析 题目链接 题目分析 分析 把N(样例中N=169)看成背包的体积:把k(样例中k=5)看成背包能承的重量.把这道题转化为二维完全背包问题.由于数据范围给出的次幂P∈[2,7],那么 ...

  5. PAT甲级1049 Counting Ones (30 分):[C++题解]统计1的个数、数位统计

    文章目录 题目分析 题目链接 题目分析 来源:PAT网站 分析: 以数字abcdefg这个7位数字为例,说一下本题的思路. 1)数字1在每一位出现的次数. 2)以第d位为例,第d位的取值可以分为3种情 ...

  6. PAT甲级1131 Subway Map (30分):[C++题解]堆优化dijkstra、单源最短路、地铁地图、巧妙地建图套dijkstra模板!!

    文章目录 题目分析 题目链接 题目分析 原题: 来源:acwing 分析: 建图:所有能走到的点之间建立一条边,比如下面一条地铁线路有4站,它们是相通的,两两之间建一条边,边权是经过的站点数. 下面考 ...

  7. PAT甲级1111 Online Map (30分):[C++题解]两次dijkstra求单源最短路、保存路径、长度最短、时间最短

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析:dijkstra求单源最短路的题目. 只是写两遍而已,第一遍求按照路径长度求,第二遍按照时间最少求. 另外加一个vector路径的判断 ...

  8. PAT甲级1030 Travel Plan (30分):[C++题解]dijkstra求单源最短路、保存路径

    文章目录 题目分析 题目链接 题目分析 来源:PAT网站 分析 dijkstra模板默写过来,然后多了一个保存路径,使用数组pre[N]记录最短路上每个点的前驱,通过pre数组保存到vector中 v ...

  9. PAT甲级1004 Counting Leaves (30分):[C++题解]树、邻接表存储树、dfs遍历树

    文章目录 题目分析 题目链接 题目分析 题意重述:一棵树,求每一层的叶子节点数目. 分析 构造树,使用邻接表来存(相当于存储有向图). 需要一个头结点数组h[N],然后每个头节点往外形成一个单链表e[ ...

最新文章

  1. pom war jar的区别
  2. echo和print 的区别
  3. Intel 酷睿i5 6300HQ与Intel 酷睿i7 6700HQ哪个好
  4. 小电商的延时队列设计概要
  5. psycopg2.errors.UndefinedTable: relation “xxxx“ does not exist
  6. 信息学奥赛C++语言:派送蛋糕
  7. 直流电机PID调节——P
  8. 中国金属复合开关设备市场趋势报告、技术动态创新及市场预测
  9. “再见,Linux!”
  10. 解决“此图片来自微信公众平台未经允许不可引用”的方法
  11. MVC5发展历程,从MVC2谈起
  12. 微信公众号推送模板消息(二):Access_token的获取
  13. 键值数据库的基本架构
  14. 使用conda安装pytorch时出现问题CondaSSLError: OpenSSL appears to be unavailable on this machine.
  15. 计算机专业考研复习要点,2017年最新考研各科目复习要点
  16. 计算机服务器安装系统安装教程,服务器如何安装系统,教您如何安装
  17. php网页地图上自定义,如何添加在线自定义地图
  18. 计算机结构化面试万能套话,结构化面试30句万能套话拯救你.pdf
  19. UI线程与子线程通信示例 日记
  20. 垃圾分类共享网站的设计与实现(SSM)

热门文章

  1. Java 第三周总结
  2. [2-SAT]【学习笔记】【未完】
  3. 关于变量作用域的一点整理
  4. Bluetooth LE(低功耗蓝牙) - 第五部分
  5. 自动化测试:Selenium webdriver 学习笔记-C#版(四)
  6. 总结一下F#中运算符的定义规则
  7. 要离开苏州,一大堆东西要处理(包括租的房子)
  8. python数据库有什么特点_python进阶十——mysql初识
  9. c++吃豆人代码_山药豆的功效与作用营养功效
  10. 做一个可以和时空分类的神经网络