远古abc题,评级对标提高,但是本蒟蒻认为不是很复杂。
题意很明白不做分析,然后看看直接dfs爆搜,但是有一个问题查询复杂度太高,解决方法直接set
然后就可以AC了:
#include <bits/stdc++.h>
using namespace std;
#define int long long
int n, m;
set<string> c;
string s[100];
bool b[100];
inline bool dfs(int i, string x) {
if (i == n + 1) {
if (x.size() >= 3 && x.size() <= 16 && c.find(x) == c.end()) {
cout << x << endl;
return 0;
}
return 0;
}
for (int j = 1; j <= n; j++)
if (!b[j]) {
b[j] = 1;
string y = x + s[j];
if (i == n) {
if (dfs(i + 1, y))
return 1;
}
else {
while (1) {
y += "_";
if (y.size() > 16)
break;
if (dfs(i + 1, y))
return 1;
}
}
b[j] = 0;
}
return 0;
}
main() {
cin >> n >> m;
for (int i = 1; i <= n; i++)
cin >> s[i];
for (int i = 1; i <= m; i++) {
string x;
cin >> x;
insert(x);
}
if (!dfs(1, ""))
cout << -1;
return 0;
}
已启用防抄袭