题解:用了40分钟,做了18分,除了第一个测试点对了,其他全错。。。。全程自己独立完成的。。。我太自豪了。。。哈哈哈,后来去看了别人博客里的满分代码,才发现我的代码里面有两点没有考虑到
3.A在寻找同性朋友时,需要避免找到他想要的伴侣B,所以当当前朋友就是B或者B的同性朋友就是A时舍弃该结果
5.如果用int接收一对朋友,-0000和0000对于int来说都是0,将无法得知这个人的性别,也就会影响他找他的同性朋友的那个步骤,所以考虑用字符串接收,因为题目中已经表示会以符号位加四位的方式给出输入,所以只要判断字符串是否大小相等,如果大小相等说明这两个人是同性
但是这并不重要,因为我自己更清楚自己走到这一步需要付出多少的努力,试问在考场上面几个人会想到这两点,尤其是最后一点。。。。为了达到那么极限的要求,我不应该把我后续的复习时间都搭进去,虽然浙大的机试(也就是PAT)和考研的笔试(500分满分)基本上是1:1的比例,你机试考得好等于比别人多考了一科!!!虽然这样的分数非常的刺激,但是我的心中有一个自己能够满意的分数。。。。而且考研后面的500分的复习同样重要,所以加油吧。。。。我目标的分数是数学100分-90分,计算机130-140分,英语75-85,政治65-70这个分数段,总分要在360分到390之间。。。这和pat一样并不容易。。。。。。但是这次“备考”pat的旅程告诉我,我能够做到。
因为pat对我并不意味着一张成绩单,这也是我大学和高中生涯对计算机科学的追寻和探索之路的一个里程碑。。。我清楚自己投入了多少感情和精力进去。
这段题解里面有不少值得学习的设计思想,虽然不是满分,并且我的代码编写逻辑都比较清晰,所以你也比较容易会看出来
// A1139.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <bits/stdc++.h>
using namespace std;
struct info {
int foa;
int fob;
};
//vector<vector<int>> gn;
unordered_map<int, vector<int>> gn;
bool cmp(info x, info y) {
if (x.foa != y.foa) {
return x.foa < y.foa;
}
else {
return x.fob < y.fob;
}
}
int main()
{
#ifndef ONLINE_JUDGE
FILE* s;
freopen_s(&s, "in.txt", "r", stdin);
#endif // !ONLINE_JUDGE
int n, m;
cin >> n >> m;
int t1, t2;
for (int i = 0; i < m; i++) {
cin >> t1 >> t2;
gn[t1].push_back(t2);
gn[t2].push_back(t1);
}
int k;
cin >> k;
for (int i = 0; i < k; i++) {
cin >> t1 >> t2;
vector<int> an;//same gender friends of A
for (int j = 0; j < gn[t1].size(); j++) {
if (gn[t1][j] * t1 > 0) {
an.push_back(gn[t1][j]);
}
}
vector<int> bn;//same gender friends of B
for (int j = 0; j < gn[t2].size(); j++) {
if (gn[t2][j] * t2 > 0) {
bn.push_back(gn[t2][j]);
}
}
vector<info> res;
if (t1 * t2 < 0) {//opposite gender
for (int j = 0; j < an.size(); j++) {
for (int p = 0; p < bn.size(); p++) {
for (int q = 0; q < gn[an[j]].size(); q++) {
if (gn[an[j]][q] == bn[p] && an[j] * bn[p] < 0) {
res.push_back({ abs(an[j]),abs(bn[p]) });
}
}
}
}
}
if (t1 * t2 > 0) {
for (int j = 0; j < an.size(); j++) {
for (int p = 0; p < bn.size(); p++) {
for (int q = 0; q < gn[an[j]].size(); q++) {
if (gn[an[j]][q] == bn[p] && an[j] * bn[p] > 0) {
res.push_back({ abs(an[j]),abs(bn[p]) });
}
}
}
}
}
//friends ready,sort begin
sort(res.begin(), res.end(), cmp);
cout << res.size() << endl;
for (auto e : res) {
cout << e.foa << " " << e.fob << endl;
}
}
return 0;
}