先对 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();
}
}