AcWing 1345. 序号命名
原题链接
中等
作者:
Vason
,
2024-04-14 20:57:27
,
所有人可见
,
阅读 5
提供一个正面做的思路——复杂了哈哈
#include <iostream>
#include <cstring>
#include <map>
#include <algorithm>
using namespace std;
map<string, int> h;
string n, m;
vector<string> ans;
char a[10][5];
void dfs(int u, string res)
{
if(u >= n.size())
{
if(h.count(res)) ans.push_back(res);
return;
}
int t = n[u] - '0';
for(int i = 0; i < 3; i ++)
{
char c = a[t][i];
dfs(u + 1, res + c);
}
}
int main()
{
cin >> n;
while(cin >> m)
{
if(!h.count(m)) h.insert({m, 1});
}
char A = 'A';
for(int i = 2; i < 10; i ++)
{
for(int j = 0; j < 3; j ++)
{
if(A == 'Q') A ++;
a[i][j] = A ++ ;
}
}
dfs(0, "");
sort(ans.begin(), ans.end());
for(int i = 0; i < ans.size(); i ++) cout << ans[i] << endl;
if(!ans.size()) cout << "NONE" << endl;
return 0;
}