陌陌的pat乙级题解目录
题解
静态链表 |
---|
乙级出过两个静态链表,天梯出过一个,这个还算简单 |
1. 定义两个map,一个放数据,一个放下一个的地址 |
2. 然后定义三个vector,一个循环将小于0 0-K 大于K 的分别放到三个vector里,并且是顺序是正常的 |
3. 依次输出也行,我又定义了一个ans,把他们三都放ans里一起输出 |
4. 静态链表的题都有坑,最后的长度可能改变,(有可能是故意输入了错误的数据),所以ans的真实大小,后面得在计算,如果输出的时候,直接 i<N,有个点过不去 |
Code
#include <iostream>
#include <map>
#include <vector>
using namespace std;
int main()
{
int first, N, K;
cin >> first >> N >> K;
map<int, int> data, rap;
for (int i = 0; i < N; i++)
{
int a, b, D;
cin >> a >> D >> b;
data[a] = D;
rap[a] = b;
}
vector<pair<int, int>> v, fudigis, kdigis, ans;
while (first != -1)
{
int D = data[first];
if (D < 0)
fudigis.push_back({first, D});
else if (D <= K)
kdigis.push_back({first, D});
else
v.push_back({first, D});
first = rap[first];
}
for (auto e : fudigis)
ans.push_back(e);
for (auto e : kdigis)
ans.push_back(e);
for (auto e : v)
ans.push_back(e);
for (int i = 0; i < ans.size(); i++)
{
if (i == 0)
printf("%05d %d ", ans[i].first, ans[i].second);
else
printf("%05d\n%05d %d ", ans[i].first, ans[i].first, ans[i].second);
}
cout << "-1";
return 0;
}