不知道为什么,样例都过不了
查看原帖
不知道为什么,样例都过不了
1046223
a_blue_fool楼主2024/3/13 13:45
#include <iostream>
#include <vector>
#include <string>

using namespace std;

struct leaf
{
    int brother , son;
    string data;
}tree[10000];

int n , cnt;
string in , str;
vector <string> r;
bool first = true;

int creat (string name)
{
	cnt++;
	tree[cnt].data = name;
	return cnt;
}

void find (int i , int it , vector <string> in)
{
	if (i == (int)in.size()-1) return;
	
	if (tree[it].data == in[i])
	{
		if (tree[it].son)
		{
			find (i+1 , tree[it].son , in);
		}
		else
		{
			tree[it].son = creat(in[i+1]);
			find (i+1 , tree[it].son , in);				
		}
	}
	else
	{
		if (tree[it].brother)
		{
			find (i+1 , tree[it].brother , in);
		}
		else
		{
			tree[it].brother = creat(in[i]);
			find (i+1 , tree[it].brother , in);							
		}
	}
	
	return;
}

void test()
{
	for (int i = 1 ; i <= cnt ; i++)
	{
		cout << tree[i].data << endl;
	}
	return;
}

int main()
{
	
    cin >> n;

    while (n--)
    {
		str.clear();
        r.clear();
        cin >> in;

        for (unsigned i = 0 ; i < in.size() ; i++)
        {
            if (in[i] == '/')
            {
                if (str.empty()) continue;
                else
                {
                    r.push_back(str);
                    str.clear();
                }
            }
            else
                str = str+in[i];
        }
		
		r.push_back(str);
		
		if (first)
		{
			creat(r[0]);
			first = false;
		}
		
		find (0 , 1 , r);
		
        cout << cnt << endl;
    }

    return 0;
}
2024/3/13 13:45
加载中...