只得了60/100
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int countLevel(const string & s)
{
int count = 0;
for(int i = 0; i < s.size(); ++i)
{
if(s[i] == '{')
{
++count;
}else if(s[i] == '}')
{
break;
}else
{
}
}
return count + 1;
}
int main()
{
vector<vector<string> >
vector<vector<int> > vec;
char* buf = (char*)malloc(10000000);
int flag = 0;
memset(buf, 0, 10000000);
int count = 0;
while(gets(buf) != NULL)
{
if(flag == 0)
{
//buf[strlen(buf) - 1] = '\0';
//time_t t1 = time(NULL);
qvec.clear();
string s = buf;
int level = countLevel(s);
qvec.resize(level);
string tmp = "";
int count = 0;
for(int i = 0; i < s.size(); ++i)
{
if(s[i] != '{' && s[i] != ',' && s[i] != '}')
{
tmp += s[i];
}else if(s[i] == '{')
{
if(tmp != "")
{
qvec[count].push_back(tmp);
++count;
}
//++count;
tmp = "";
}else if(s[i] == '}')
{
if(tmp != "")
{
qvec[count].push_back(tmp);
--count;
}
//--count;
tmp = "";
}else if(s[i] == ',')
{
if(tmp != "")
{
qvec[count].push_back(tmp);
}
tmp = "";
}else
{ // do nothing
}
}
++flag;
}else
{
//time_t t1 = time(NULL);
string s = buf;
int level = 0;
vector<int> ivec;
for(int i = 0; i < qvec.size(); ++i)
{
for(int j = 0; j < qvec[i].size(); ++j)
{
if(s == qvec[i][j])
{
if(find(ivec.begin(), ivec.end(), i + 1) == ivec.end())
{
level = i + 1;
ivec.push_back(level);
}
}
}
}
flag = 0;
sort(ivec.begin(), ivec.end());
vec.push_back(ivec);
// time_t t2 = time(NULL);
}
memset(buf, 0, 10000000);
}
for(int i = 0; i < vec.size(); ++i)
{
for(int j = 0; j < vec[i].size(); ++j)
{
if(j == 0)
{
printf("%d", vec[i][j]);
}else
{
printf(",%d ", vec[i][j]);
}
}
printf("\n");
}
free(buf);
return 0;
}