1 条题解
-
1
dfs
#include <iostream> #include <string> #include <vector> #include <numeric> #include <unordered_set> using namespace std; using ll = long long; struct AC { int n, m; vector<string> sArr; unordered_set<string> noArr; vector<char> vis; string res{}, now{}; void run() { cin >> n >> m; sArr.resize(n); vis = vector<char>(n); int len = 0; for (int i = 0; i < n; ++i) { cin >> sArr[i]; len += sArr[i].size(); } for (int i = 0; i < m; ++i) { string s; cin >> s; noArr.insert(std::move(s)); } if (len + n - 1 > 16) { cout << -1 << '\n'; return; } dfs(n - 1); if (res.size()) { cout << res << '\n'; } else { cout << -1 << '\n'; } } // 枚举选哪个 void dfs(int k) { if (k < 0) { if (!noArr.count(now) && now.size() >= 3) { res = now; } return; } for (int i = 0; i < n; ++i) { if (vis[i]) continue; vis[i] = 1; if (now.size()) { const int end = 16 - now.size() - sArr[i].size(); for (int j = 1; j <= end; ++j) { string tmp = now; // 选 now = now + string(j, '_') + sArr[i]; dfs(k - 1); if (res.size()) return; now = std::move(tmp); } } else { string tmp = now; now += sArr[i]; dfs(k - 1); if (res.size()) return; now = std::move(tmp); } vis[i] = 0; } } }; int main() { AC ac; ac.run(); return 0; }
- 1
信息
- ID
- 335
- 时间
- 1500ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- (无)
- 递交数
- 562
- 已通过
- 67
- 上传者