这个题就是多加了一些操作,其他的和之前一样。注意有测试点是刚好是两倍的情况。
25分AC
#include <bits/stdc++.h>
using namespace std;
struct node {
int next, data;
}Node[100000];
vector<int> v1, v2, maxV, minV, ans;
int main () {
int fAd1, fAd2, n, ad, data, next;
scanf ("%d %d %d", &fAd1, &fAd2, &n);
for (int i = 0; i < n; i++) {
scanf ("%d %d %d", &ad, &data, &next);
Node[ad].data = data;
Node[ad].next = next;
}
while (fAd1 != -1) {
v1.push_back(fAd1);
fAd1 = Node[fAd1].next;
}
while (fAd2 != -1) {
v2.push_back(fAd2);
fAd2 = Node[fAd2].next;
}
if (v1.size() < v2.size()) {
reverse (v1.begin(), v1.end());
minV = v1;
maxV = v2;
}
else {
reverse (v2.begin(), v2.end());
minV = v2;
maxV = v1;
}
int i = 0;
for (int j = 0; j < minV.size(); ) {
if (i % 2 == 0 && i != 0) ans.push_back(minV[j++]);
if (j < minV.size()) ans.push_back(maxV[i++]);
}
while (i < maxV.size()) {
ans.push_back(maxV[i]);
i++;
}
// cout <<ans.size() << endl;
// for (auto it : ans) {
// cout << Node[it].data<< endl;
// }
for (i = 0; i < ans.size(); i++) {
if (i != ans.size() - 1) printf ("%05d %d %05d\n", ans[i], Node[ans[i]].data, ans[i + 1]);
else printf ("%05d %d -1\n", ans[i], Node[ans[i]].data);
}
}