关闭

CodeForces-747E

标签: codeforces
196人阅读 评论(0) 收藏 举报
分类:

    这几天好懒,昨天写的题,今天才来写博客....

    这题你不知道它究竟有多少层,但是知道字符串长度不超过10^6,那么它的总容量是被限定的,用一个二维动态数组就OK了。输入字符串后,可以把它按照逗号分割成一个string数组,然后两个一处理就行,遇到0结束。

AC代码:

#include<cstdio>
#include<string>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
const int maxn=1e6+5;
char s[maxn];
string a[maxn];
vector<string>v[maxn/2];
int cur=0,ans,len;
int deal(){
	int u=0;
	for(int i=0;s[i]!='\0';++i){
		if(s[i]==',') continue;
		a[u]="";
		while(s[i]!=','&&s[i]!='\0'){
			a[u]+=s[i++];
		}
		++u;
		--i;
	}
	return u; 
}
int gett(string p){
	int c=0;
	for(int i=0;i<p.size();++i)
		c=c*10+(p[i]-'0');
	return c;
}
void dfs(int lev){
	//if(cur>=len) return;
	ans=max(ans,lev);
	v[lev].push_back(a[cur++]);
	int c=gett(a[cur++]);
	for(int i=0;i<c;++i){
		dfs(lev+1);
	}	
}
int main(){
	while(scanf("%s",s)!=EOF){
		len=deal();
		cur=0;
		ans=-1;
		for(;cur<len;)
			dfs(0);
		printf("%d\n",ans+1);
		for(int i=0;i<=ans;++i){
			for(int j=0;j<v[i].size();++j)
				if(j==0) cout<<v[i][j];
				else cout<<" "<<v[i][j];
			printf("\n");
		}
		for(int i=0;i<maxn/2;++i) v[i].clear();
	}
	return 0;
}

如有不当之处欢迎指出!

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:109543次
    • 积分:4902
    • 等级:
    • 排名:第6589名
    • 原创:401篇
    • 转载:6篇
    • 译文:0篇
    • 评论:13条
    博客专栏