PAT 1178 File Path
AC代码
可通过所有测试样例
#include<iostream>
using namespace std;
const int N=1e3+10;
int n;
string s[N];
int d[N]; // 空格数
void find(string x){
int k=-1; // 当前查询的位置
for(int i=0;i<n;i++) {
if(s[i]==x) {
k=i;
break;
}
}
if(k==-1) {
cout<<"Error: "<<x<<" is not found."<<endl;
return;
}
int sum=d[k]+1; // 答案要输出的总数
string ans[sum]; // 存答案
ans[sum-1]=x;
int now=d[k]-1; // 当前要找的数前面有几个空格
for(int j=k-1;j>=0;j--){
if(d[j]==now&&now!=-1) {
ans[now--]=s[j]; // 逆序把父节点存入
}
}
for(int i=0;i<sum;i++) {
cout<<ans[i]; // 输出
if(i<sum-1) cout<<"->";
}
puts("");
}
int main(){
cin>>n;
getchar();
for(int i=0;i<n;i++){
string s1,s2;
getline(cin,s1);
for(int j=0;j<s1.size();j++) {
if (s1[j] == ' ') d[i]++;
else s2+=s1[j];
}
s[i]=s2;
}
int k=0; // 待查询的数的总数
cin>>k;
for(int i=0;i<k;i++){
string x;
cin>>x;
find(x);
}
return 0;
}