使用两个map记录每个地址对应的值和每个地址对应的下一个地址,然后模拟即可
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
typedef long long ll;
const int N = 3e5 + 10;
const int mod = 998244353;
void solve() {string st;int n;cin>>st>>n;map<string,int> value; //地址对应的值map<string ,string> ne; //该地址的下一个地址for(int i = 1 ; i <= n ; i++){string address;int data;string next;cin>>address>>data>>next;value[address] = data;ne[address] = next;}string now = st;vector<pair<string,int>> ans;while(now != "-1"){ans.push_back({now,value[now]});now = ne[now];}// for(int i = 0; i < ans.size() ; i++){// cout<<ans[i].first<<" "<<ans[i].second<<endl;// }int l = 0,r = ans.size()-1;vector<pair<string,int>> res;while(l <= r){if(l == r){res.push_back({ans[l].first,ans[l].second});l++;r--;}else{res.push_back({ans[r].first,ans[r].second});res.push_back({ans[l].first,ans[l].second});l++;r--;}}int len = res.size();res.push_back({"-1",-1});for(int i = 0 ; i < len ; i++){cout<<res[i].first<<" "<<res[i].second<<" "<<res[i+1].first<<endl;}
}
signed main() {// ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);int tt = 1;// cin >> tt;while (tt--) {solve();}return 0;
}