坑爹玩意,样例过了,评论里的n=10的也ok,就是不过,不知道为啥,仅供思路参考
我是SB!(bushi),问题出在没处理好划分格式,每条路径最后是一个“\”,所以在我的代码逻辑中不用对nowlen额外增1 。
//算法思想:对字符串排序,然后成块输出,对块计数
#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
int n;
bool firstcase=0;
while(scanf("%d",&n)!=EOF){
if(n==0) break;
if(firstcase==0) firstcase=1;
else printf("\n");
vector<string> str;//存放每一行字符串
string tmp;
for(int i=0;i<n;i++){
cin>>tmp;
str.push_back(tmp);
}
sort(str.begin(),str.begin()+n);
int perlen=0;
string perstr[50]; //将字符串按块存,分为当前组块和上一组块
for(int i=0;i<n;i++){
int nowlen=0;
string nowstr[50];
for(int j=0;j<str[i].length();j++){
if(str[i][j]!='\\') nowstr[nowlen]+=str[i][j];
else{
nowlen++;
}
}
//nowlen+=1; 时隔两年才发现。。。
int k=0,step=0;
while(i!=0&&k<nowlen&&k<perlen){
if(nowstr[k]!=perstr[k]) break;
step++;
k++;
}
while(k<nowlen){
for(int l=0;l<step;l++) printf(" ");
cout<<nowstr[k]<<endl;
step++;
k++;
}
for(int j=0;j<nowlen;j++) perstr[j]=nowstr[j];
perlen=nowlen;
}
}
return 0;
}