差分机 题解

题目链接

解析逻辑

差分机的运行逻辑是完成这道题目的关键。在成功执行一个操作之后,它就会从头开始寻找是否存在可以执行的操作,根据这个特性,我们可以获取一些技巧:

  1. 在整个操作序列最开始插入 答案字符串=(return),这样只要在一次操作后字符串是答案,就可以直接终止操作,获得正确答案。
  2. 如果某个操作的前面的所有操作都不能执行,那么这个操作才会执行。

策略

先在操作序列最前面加入 答案字符串=(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\)

posted @ 2024-01-22 20:05  cndark_moon  阅读(26)  评论(0)    收藏  举报