您的位置:首页 > 其它

Undraw the Trees UVA 10562(递归写树)

2018-02-05 16:24 183 查看
这道题不难,直接做就好了,但是对边界的要求还是比较严格的,需要处理的细节比较多

#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define inf 0x3f3f3f3f
#define rep(i,a,b) for(int i=a;i<b;i++)
#define rep1(i,a,b) for(int i=a;i>=b;i--)
#define rson rt<<1|1,m+1,r
#define lson rt<<1,l,m
using namespace std;
const int N=1e5+10;
int arr
,cnt;
bool islable( char c ) {
if( c == ' ' || c  == '|' || c == '#' || c == '-' || c == '/n' )
return false ;
return true ;
}
void dfs(string str[],int l,int r,int c)
{
if(c>=cnt)return ;
for(int i=l;i<=r&&i<str[c].size();i++)
{
if(islable(str[c][i]))
{
cout<<str[c][i];
cout<<'(';
if(c<cnt-2&&str[c+1][i]=='|')
{

int j=i;
while(j>0&&str[c+2][j]=='-')
j--;
int l1=j;
j=i;
while(j<str[c+2].size()+1&&str[c+2][j]=='-')
j++;
int r1=j;
dfs(str,l1,r1,c+3);
}
cout<<')';
}
}
}
int main()
{
int t;
cin>>t;
getchar();
while(t--)
{
string str[210];
cnt=0;
while(getline(cin,str[cnt++]))
{
if(str[cnt-1][0]=='#')break;
}
cout<<'(';
dfs(str,0,str[0].size()-1,0);
cout<<')'<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  uva 紫书