<简单思维题> 总之还是题做少了
https://codeforces.com/gym/102900/problem/M
题意:
t组数据 n(表示可以删除的文件) m(表示不可以删除的文件)
两个操作:
1.删除一个文件
2.删除一个文件夹问你把全部需要删除的文件删除的最小步骤
思路:
因为需要找最小步骤,所以我们能删文件夹那么就删文件夹
所以我们需要把每一个路径都映射到mp里面去,对不能删的打标记,然后对再用标记处理能删的
code:
处理读入字符串
for(int i=0; i<n; i++)
cin>>str1[i];
for(int i=0; i<m; i++)
cin>>str2[i];
映射不能改的并且打标记
因为有路径中有多个 '/ ’ 我们不分开处理每一个文件夹
(一开始想是不是需要substr)我们就直接全部都映射过来
for(int i=0; i<m; i++)
{
int sz = str2[i].size();
string temp ="";
for(int j = 0; j<sz; j++)
{
temp += str2[i][j];
if(str2[i][j] == '/')
mp[temp] = 1; 打上标记
}
}
对能删除的路径做处理
for(int i=0;i<n;i++)
{
int sz = str1[i].size();
string temp = "";
for(int j=0;j<sz;j++)
{
temp +=str1[i][j];
if(str1[i][j] =='/')
{
if(mp[temp] == 0) 这一条路径是能删的
mp[temp] = 2; 那么打上标记2
else
if(mp[temp] == 2) 如果改路径可以删
{
ans --; 那么ans --
break; 因为删除了 后面的文件就不管他了
}
}
}
}