给你一些文件夹和文件,文件夹没有空的,文件夹里面可能有文件和文件夹,有些文件是可以忽略的,有些文件是不能被忽略的,我们要找到最少的能被忽略的文件的个数。
大模拟 做了好久 这种题还是给坤子哥做好了=.=
#include<string>
#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<vector>
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
#define LL long long
#define MOD 100000007
#define PI 3.1415926535898
#define INF 0x3f3f3f3f
#define MAXN 200050
#define register long long
const double EPS = 1e-8;
LL read()
{
LL w = 1, x = 0;
char ch = 0;
while (ch < ‘0‘ || ch>‘9‘)
{
if (ch == ‘-‘)
w = -1;
ch = getchar();
}
while (ch >= ‘0‘ && ch <= ‘9‘)
{
x = x * 10 + ch - ‘0‘;
ch = getchar();
}
return w * x;
}
map<string, int >mp;
int t, m, n;
string s[105], ss;
int main()
{
t = read();
while (t--)
{
n = read();
m = read();
mp.clear();
ss = "";
for (register int i = 1; i <= n + m; i++)
cin >> s[i];
for (register int i = n + 1; i <= n + m; i++)
{
ss = "";
for (register int j = 0; j <= s[i].length(); j++)
{
ss += s[i][j];
if (s[i][j] == ‘/‘)
{
mp[ss] = 1;
//continue;
}
}
}
int ans = n;
ss = "";
for (register int i = 1; i <= n; i++)
{
ss = "";
for (register int j = 0; j < s[i].length(); j++)
{
ss += s[i][j];
if (s[i][j] == ‘/‘)
{
if (mp[ss] == 0)
{
mp[ss] = 2;
}
else
{
if (mp[ss] == 1)
{
continue;
}
else
{
ans--;
break;
}
}
}
}
}
cout << ans << endl;
for (register int i = 1; i <= n + m; i++)
{
s[i] = "";
}
}
return 0;
}
原文:https://www.cnblogs.com/lumingran/p/14232091.html