1 条题解

  • 1
    @ 2025-4-11 15:18:25

    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
    上传者