1139 First Contact
题意:给出n个人,m对朋友关系,其中带负号的表示女孩。然后给出k对查询a,b,要求找出所有a的同性别好友c,以及b的同性别好友d,且c和d又是好友关系。输出所有满足条件的c和d,按c的升序输出,若c编号相同则按d的升序输出。
思路:其实不难,30分的题有点被唬住了。
对于每一个查询a,b,先分别找出a同性好友friend[a],b的同性好友friend[b],然后在friend[a]和friend[b]中找出具有朋友关系的c,d即可。注意,根据题意,-0000和0000是不一样的,若以int类型数据读入,则均表示为0,从而无法区别性别,因此读入数据应该以字符串的类型读入。两者性别是否一致可通过其字符串的长度是否一致来区别。最后,若a,b为同性时,存在a的好友就是b,或b的好友就是a的特殊情况,应该排除掉。因为a要向b联系必须通过两个中间人!
代码:
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <unordered_map>
#include <map>
#include <set>
#include <vector>
using namespace std;
unordered_map<int,unordered_map<int,bool>> mp;//表示朋友关系的映射
map<int,set<int>> friendOfBoy,friendOfGirl;
int main()
{
//freopen("pat.txt","r",stdin);
int n,m,k;
scanf("%d%d",&n,&m);
],b[];
;i<m;i++){
scanf("%s%s",a,b);
int u=abs(atoi(a)), v=abs(atoi(b));
mp[v][u]=mp[u][v]=true;
if(strlen(a)==strlen(b)){
]=='-'){
friendOfGirl[u].insert(v);
friendOfGirl[v].insert(u);
}else{
friendOfBoy[u].insert(v);
friendOfBoy[v].insert(u);
}
}
}
scanf("%d",&k);
;i<k;i++){
set<int> friendA,friendB;
vector<pair<int,int>> ans;
scanf("%s%s",a,b);
int u=abs(atoi(a)), v=abs(atoi(b));
if(strlen(a)==strlen(b)){
]=='-'){
friendA=friendOfGirl[u];
friendB=friendOfGirl[v];
}else{
friendA=friendOfBoy[u];
friendB=friendOfBoy[v];
}
}]=='-'){
friendA=friendOfGirl[u];
friendB=friendOfBoy[v];
}else{
friendA=friendOfBoy[u];
friendB=friendOfGirl[v];
}
for(auto p:friendA){
for(auto q:friendB){
if(p==v || q==u) continue;
if(mp[p][q]) ans.push_back(pair<int,int>(p,q));
}
}
printf("%d\n",ans.size());
for(auto it:ans)
printf("%04d %04d\n",it.first,it.second);
}
;
}
1139 First Contact的更多相关文章
- PAT 1139 First Contact[难][模拟]
1139 First Contact(30 分) Unlike in nowadays, the way that boys and girls expressing their feelings o ...
- 1139 First Contact(30 分)
Unlike in nowadays, the way that boys and girls expressing their feelings of love was quite subtle i ...
- PAT 1139 First Contact
Unlike in nowadays, the way that boys and girls expressing their feelings of love was quite subtle i ...
- PAT甲级1139 First Contact
题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805344776077312 题意: 有m对朋友关系,每个人用4为数 ...
- pat advanced 1139. First Contact (30)
题目链接 解法暴力 因为有 0000, -0000 这样的数据,所以用字符串处理 同性的时候,遍历好朋友时会直接遍历到对方,这个时候应该continue #include<cstdio> ...
- 1139 First Contact PAT (Advanced Level)
原题链接: https://pintia.cn/problem-sets/994805342720868352/problems/994805344776077312 测试点分析: 首先来分析一下测试 ...
- pat甲级1139
1139 First Contact(30 分) Unlike in nowadays, the way that boys and girls expressing their feelings o ...
- PTA 1139 1138 1137 1136
PAT 1139 1138 1137 1136 一个月不写题,有点生疏..脑子跟不上手速,还可以啦,反正今天很开心. PAT 1139 First Contact 18/30 找个时间再修bug 23 ...
- PAT (Advanced Level) 1136~1139:1136模拟 1137模拟 1138 前序中序求后序 1139模拟
1136 A Delayed Palindrome(20 分) 题意:给定字符串A,判断A是否是回文串.若不是,则将A反转得到B,A和B相加得C,若C是回文串,则A被称为a delayed palin ...
随机推荐
- spring3: AOP 之代理机制
Spring AOP通过代理模式实现,目前支持两种代理:JDK动态代理.CGLIB代理来创建AOP代理,Spring建议优先使用JDK动态代理. JDK动态代理:使用java.lang.reflect ...
- yii2:模块
yii2:模块 模块不同于frontend/frontback单独的前后台单独的主题项目,模块不能单独部署,必须属于某个应用主体(如前后台:frontend/frontback). 模块置于modul ...
- hdu4348区间更新的主席树+标记永久化
http://acm.hdu.edu.cn/showproblem.php?pid=4348 sb的标记永久化即可,刚开始add和sum没复制过来wa了两发...,操作和原来的都一样,出来单点变成区间 ...
- 51nod 1287 线段树
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1287 简单的线段树题目,直接写个二分查找大于等于x的最小位置就好了. # ...
- dojo学习教程
Dojo 作为最著名的 Ajax 开源项目之一,不仅让 Web 程序员可以免费获得和使用其框架进行 Web 应用的开发,更吸引了大量的开发者对其不断的扩充,开发新的组件.DojoX 就是在这样的开发社 ...
- 20165210 2017-2018-2《Java程序设计》课程总结
20165210 2017-2018-2<Java程序设计>课程总结 每周作业链接汇总: 预备作业一: 20165210 我期望的师生关系 预备作业二:20165210 学习基础和C语言基 ...
- 如何在公司Http代理后使用NuGet官方源
文章转自CSDN 霍力强的专栏 有些公司上网使用的是Http代理.默认情况下,VS是无法访问外部网络的.如果要使用NuGet,通常只能在局域网里架一个自己的NuGet服务器.但这种方法不论是packa ...
- (三)java程序的编译和执行
编写java程序 eg class Demo { /* * 程序运行的入口 */ public static void main(String[] args) { System.out.println ...
- Bootstrap和IE何时能相亲相爱啊~
公司新项目,嘚瑟了一下,用了用Bootstrap... ... 发现了一个小坑(也许只是对我而言)... ... 使用了2.x的Jquery,在chrome等高版本浏览器一切顺利... ... 然,3 ...
- JQuery 提示用户名密码不为空
$(document).ready(function(){ //HTML()替换 HTML函数 //append()追加 :input = :t ...