PTA 1065 单身狗 (25 分) C++实现
Posted Crazy.宥思
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PTA 1065 单身狗 (25 分) C++实现相关的知识,希望对你有一定的参考价值。
1065 单身狗 (25 分)
“单身狗”是中文对于单身人士的一种爱称。本题请你从上万人的大型派对中找出落单的客人,以便给予特殊关爱。
输入格式:
输入第一行给出一个正整数 N(≤ 50 000),是已知夫妻/伴侣的对数;随后 N 行,每行给出一对夫妻/伴侣——为方便起见,每人对应一个 ID 号,为 5 位数字(从 00000 到 99999),ID 间以空格分隔;之后给出一个正整数 M(≤ 10 000),为参加派对的总人数;随后一行给出这 M 位客人的 ID,以空格分隔。题目保证无人重婚或脚踩两条船。
输出格式:
首先第一行输出落单客人的总人数;随后第二行按 ID 递增顺序列出落单的客人。ID 间用 1 个空格分隔,行的首尾不得有多余空格。
输入样例:
3
11111 22222
33333 44444
55555 66666
7
55555 44444 10000 88888 22222 11111 23333
结尾无空行
输出样例:
5
10000 23333 44444 55555 88888
结尾无空行
解题思路:
先利用数组或map容器建立情侣数之间的对应关系,再将参加派对的人数作为数组的下标来找是否有相应的对应关系,如果没有,则代表它为单身狗
Tips:每人对应一个 ID 号,为 5 位数字(从 00000 到 99999),这时的输出有两种处理:
①将输入的id号看成是字符串,输出的时候就按原字符串输出即可
②id号不看成字符串就看成纯数字,但是输出的时候要用printf("%05d",x);这种格式
代码示例(第①种处理,超时):
#define _CRT_SECURE_NO_DEPRECATE
#include <iostream>
#include <algorithm>
#include <iomanip>
#include <vector>
#include <string>
#include <cmath>
#include <numeric>
#include <map>
using namespace std;
int main()
{
int n;
cin >> n; //情侣总数
map<string, string> lovers; //建立情侣数对应关系
for (int i = 0; i < n; i++)
{
string mate1, mate2;
cin >> mate1 >> mate2;
lovers[mate1] = mate2;
lovers[mate2] = mate1;
}
int total; //参加派对的总人数
cin >> total;
vector<string> res;
for (int i = 0; i < total; i++)
{
string temp;
cin >> temp;
res.push_back(temp);
}
//将参加派对的数字按升序排序,便于后续处理
sort(res.begin(), res.end());
vector<string> ans; //存单身数字
for (int i = 0; i < res.size(); i++)
{
int key = 0; //标记是否单身(为1不单身,为0单身)
for (int j = 0; j < res.size(); j++)
{
if (lovers[res[i]] == res[j])
{
key = 1;
break;
}
}
if (key == 0)
{
ans.push_back(res[i]);
}
}
cout << ans.size() << endl; //输出单身总数
int flag = 1; //输出控制
for (int i = 0; i < ans.size(); i++)
{
if (flag > 1)
{
cout << " ";
}
cout << ans[i];
flag++;
}
}
运行结果:
代码示例(第②种处理,完美通过):
#define _CRT_SECURE_NO_DEPRECATE
#include <iostream>
#include <algorithm>
#include <iomanip>
#include <vector>
#include <string>
#include <cmath>
#include <numeric>
#include <map>
using namespace std;
int main()
{
int n;
cin >> n; //情侣总数
vector<int> lovers(100005, -1); //建立情侣数对应关系
for (int i = 0; i < n; i++)
{
int mate1, mate2;
cin >> mate1 >> mate2;
lovers[mate1] = mate2;
lovers[mate2] = mate1;
}
int total;
cin >> total; //参加派对的总人数
vector<int> res;
for (int i = 0; i < total; i++)
{
int temp;
cin >> temp;
res.push_back(temp);
}
//将参加派对的数字按升序排序,便于后续处理
sort(res.begin(), res.end());
vector<int> ans; //存单身数字
for (int i = 0; i < res.size(); i++)
{
int key = 0;
for (int j = 0; j < res.size(); j++)
{
if (lovers[res[i]] == res[j])
{
key = 1;
break;
}
}
if (key == 0)
{
ans.push_back(res[i]);
}
}
cout << ans.size() << endl; //输出单身总数
int flag = 1; //输出控制
for (int i = 0; i < ans.size(); i++)
{
if (flag > 1)
{
cout << " ";
}
printf("%05d",ans[i]);
flag++;
}
}
运行结果:
明天就是七夕节了,先提前祝大家七夕快乐!热闹是你们的,而我就是那个单身狗🐕
以上是关于PTA 1065 单身狗 (25 分) C++实现的主要内容,如果未能解决你的问题,请参考以下文章