PAT (Advanced Level) Practice - 1139 First Contact(30 分)

简介: PAT (Advanced Level) Practice - 1139 First Contact(30 分)

题目链接:点击打开链接

题目大意:略。

解题思路:

  1. 用数组vis标记两个人是否是朋友(邻接矩阵表示),用vec标记所有人的同性朋友(邻接表表示)unordered_map<int, int> vis 替代二维数组可避免内存超限。
  2. 对于一对想要在一起的A和B,他们需要先找A的所有同性朋友C,再找B的所有同性朋友D,当C和D两人是朋友的时候则可以输出C和D。
  3. A在寻找同性朋友时,需要避免找到他想要的伴侣B,所以当当前朋友就是B或者B的同性朋友就是A时舍弃该结果。
  4. 如果用int接收一对朋友,-0000和0000对于int来说都是0,将无法得知这个人的性别,也就会影响他找他的同性朋友的那个步骤,所以考虑用字符串接收,因为题目中已经表示会以符号位加四位的方式给出输入,所以只要判断字符串是否大小相等,如果大小相等说明这两个人是同性。
  5. 结果数组因为必须按照第一个人的编号从小到大排序(当第一个相等时按照第二个人编号的从小到大排序),所以要用sort对ps数组排序后再输出结果。


AC 代码

#include<bits/stdc++.h>#include<cmath>#define mem(a,b) memset(a,b,sizeof a)#define ssclr(ss) ss.clear(), ss.str("")#define INF 0x3f3f3f3f#define MOD 1000000007usingnamespacestd;
typedeflonglongll;
constintmaxn=1e4+10;
structpeo{
intu,v;
}ps[maxn*10];
unordered_map<int,int>vis;
vector<int>vec[maxn];
intfhash(intid1,intid2)
{
returnid1*10000+id2;
}
intcmp(peop1, peop2)
{
returnp1.u==p2.u?p1.v<p2.v : p1.u<p2.u;
}
intmain()
{
intn,m,u,v,q;
strings1,s2;
stringstreamss;
scanf("%d%d",&n,&m);
for(inti=0;i<m;i++)
    {
cin>>s1>>s2;
ssclr(ss), ss<<s1, ss>>u;
ssclr(ss), ss<<s2, ss>>v;
u=abs(u), v=abs(v);
if(s1.length()==s2.length())
        {
vec[u].push_back(v);
vec[v].push_back(u);
        }
vis[fhash(u,v)]=vis[fhash(v,u)]=1;
    }
scanf("%d",&q);
while(q--)
    {
intl=0;
scanf("%d%d",&u,&v);
u=abs(u), v=abs(v);
for(inti=0;i<vec[u].size();i++)
        {
for(intj=0;j<vec[v].size();j++)
            {
if(vec[u][i]==v||vec[v][j]==u) continue;
if(vis[fhash(vec[u][i],vec[v][j])]==1)
ps[l].u=vec[u][i], ps[l++].v=vec[v][j];
            }
        }
sort(ps,ps+l,cmp);
printf("%d\n",l);
for(inti=0;i<l;i++) printf("%04d %04d\n",ps[i].u,ps[i].v);
    }
return0;
}
目录
相关文章
|
数据可视化 PyTorch 算法框架/工具
使用PyTorch搭建VGG模型进行图像风格迁移实战(附源码和数据集)
使用PyTorch搭建VGG模型进行图像风格迁移实战(附源码和数据集)
1094 1
|
9月前
|
机器学习/深度学习 人工智能 API
如何在c++侧编译运行一个aclnn(AOL)算子?
CANN的AOL库提供了一系列高性能算子API,优化了昇腾AI处理器的调用流程。通过两段式接口设计,开发者可以高效地调用算子库API,实现模型创新与应用,提升开发效率和模型性能。示例中展示了如何使用`aclnnAdd`算子,包括环境初始化、算子调用及结果处理等步骤。
|
9月前
|
存储 自然语言处理 算法
【北京大学 软件工程】四、结构化分析方法
结构化分析方法是一种系统化的软件开发方法学,旨在通过使用问题域术语建立系统的功能模型,以明确“系统必须做什么”。该方法包括结构化分析、设计和程序设计三个主要部分。其核心工具是数据流图(DFD),用于表达系统功能模型,并结合数据字典定义数据流和数据存储。此外,还使用加工小说明(如判定表或判定树)描述加工逻辑。 结构化分析过程遵循自顶向下、逐步求精的原则,首先建立系统环境图确定边界,然后通过分解加工、分派数据流和引入文件来细化模型。整个过程中需确保模型平衡和信息组织的复杂性控制。最终输出为需求规格说明书(SRS),确保需求的正确性、无二义性、完整性和可验证性等特性。
|
前端开发 搜索推荐 API
【Qt 学习笔记】QWidget的styleSheet属性 | RGB | 在线调色板
【Qt 学习笔记】QWidget的styleSheet属性 | RGB | 在线调色板
900 5
|
存储 Unix Linux
Linux 内核源代码情景分析(三)(上)
Linux 内核源代码情景分析(三)
114 1
|
数据采集 人工智能 算法
2022年计算机保研夏令营经验总结,11所院校经历,预推免上岸北大
2022年计算机保研夏令营经验总结,11所院校经历,预推免上岸北大
|
存储 计算机视觉
vs2019+Qt 使用 Qlabel 在界面上显示图像及显示失真问题
vs2019+Qt 使用 Qlabel 在界面上显示图像及显示失真问题
|
自然语言处理 并行计算 PyTorch
基于Pytorch中安装torchvision简单详细完整版
基于Pytorch中安装torchvision简单详细完整版
4769 1
基于Pytorch中安装torchvision简单详细完整版
|
测试技术
集成测试之自顶向下、自底向上、三明治集成
集成测试之自顶向下、自底向上、三明治集成
1684 0
集成测试之自顶向下、自底向上、三明治集成
|
C++
【PAT甲级 - C++题解】1145 Hashing - Average Search Time
【PAT甲级 - C++题解】1145 Hashing - Average Search Time
126 0