LINK

先对 m m m个不能删除的路径做处理

一个路径不能删除,说明它的所有前缀路径不能删除

(由于最后一个是文件,不需要管,所以只把’\'作为分隔符即可)

我们把所有前缀路径丢进 m a p map map

然后处理 n n n个需要删除的路径

也就是所有前缀路径至少删除一个,实在不行就直接删除文件

我们贪心删除范围大的即可

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e3+10;
map<string,int>mp;
string a[maxn],b[maxn];
int n,m,t;
int main()
{
	cin >> t;
	while( t-- )
	{
		cin >> n >> m;
		for(int i=1;i<=n;i++)	cin >> a[i];
		for(int i=1;i<=m;i++)	cin >> b[i];
		for(int i=1;i<=m;i++)
		{
			string s = "";
			for(int j=0;j<b[i].length();j++)
			{
				s += b[i][j];
				if( b[i][j]=='/' )	mp[s] = 1;
			}
		}
		int ans = 0;
		for(int i=1;i<=n;i++)
		{
			string s = "";
			int flag = 0;
			for(int j=0;j<a[i].length();j++)
			{
				s += a[i][j];
				if( a[i][j]=='/' )	
				{
					if( mp[s]==2 )	{ flag = 1; break; }//已经被删掉了 
					if( mp[s]==1 )	continue;//不能被删掉 
					mp[s] = 2,ans++; flag = 1;
					break;
				}
			}
			if( !flag )	ans++;			
		}
		cout << ans << endl;
		mp.clear();
	}
}