Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
193992 | luckypet | 修复符文 | C++ | 编译错误 | 0 | 0 MS | 0 KB | 1683 | 2025-05-29 14:26:11 |
#include <iostream> #include <string> #include <algorithm> #include <set> using namespace std; string transform(const string& s, int x) { int n = s.length(); string left = s.substr(0, x); string right = s.substr(x); string new_str = right + left; reverse(new_str.begin(), new_str.end()); return new_str; } bool can_transform(const string& s, const string& t, int a, int b) { if (s == t) return true; int n = s.length(); if (n != t.length()) return false; set<string> visited; set<string> queue; queue.insert(s); visited.insert(s); while (!queue.empty()) { set<string> next_queue; for (const string& current : queue) { // 尝试变换a string next_a = transform(current, a); if (next_a == t) return true; if (visited.find(next_a) == visited.end()) { visited.insert(next_a); next_queue.insert(next_a); } // 尝试变换b string next_b = transform(current, b); if (next_b == t) return true; if (visited.find(next_b) == visited.end()) { visited.insert(next_b); next_queue.insert(next_b); } } queue = next_queue; } return false; } int main() { int T; cin >> T; for (int i = 0; i < T; i++) { string s, t; int a, b; cin >> s >> t; cin >> a >> b; if (can_transform(s, t, a, b)) { cout << "yes" << endl; } else { cout << "no"