差分机 题解
解析逻辑
差分机的运行逻辑是完成这道题目的关键。在成功执行一个操作之后,它就会从头开始寻找是否存在可以执行的操作,根据这个特性,我们可以获取一些技巧:
- 在整个操作序列最开始插入
答案字符串=(return),这样只要在一次操作后字符串是答案,就可以直接终止操作,获得正确答案。 - 如果某个操作的前面的所有操作都不能执行,那么这个操作才会执行。
策略
先在操作序列最前面加入 答案字符串=(return)。
然后输出 \(26\) 行分别为
\(a=A\)
\(b=A\)
\(\vdots\)
\(z=A\)
此时我们成功将整个字符串全部转化为字符 \(A\),为了方便转化为目标字符串,可以将多余的 \(A\) 删掉,也就是删掉 \(|S|-1\) 个A,输出 \(AA\dots A-\) 即可。
最后,整个字符串只有一个字符 \(A\),将其通过第一个关键字转化为答案序列即可。
Show Code
#include
using namespace std;
string s, t;
string c = "0abcdefghijklmnopqrstuvwxyz";
signed main(){
cin >> s >> t;
cout << 29 << "\n";
cout << t << "=(return)\n";
for(int i = 1; i <= 26; i ++)
cout << c[i] << "=A\n";
for(int i = 0; i < s.size() - 1; i ++)
cout << "A";
cout << "-\n";
cout << "A=";
cout << t;
}
总结
简单构造,感谢user10086提供的 \(SPJ\)。

浙公网安备 33010602011771号