#这道题的问题关键在于如何判断两个单词是否为兄弟单词 #猜测:两个单词只要有完全相同的字母组成,总可以经过交换达到相等 #如果上面的猜测成立,那么就很好判断了 #直接对比二者排序之后的结果,相等即可 #对了,二者不能直接相等,这不符合定义 #思路: #获取到各个数据 #遍历b,判断兄弟单词,存到ans中 #输出 a=input().split() n=int(a[0])#字典单词数量 b=a[1:n+1]#字典单词库 x=a[n+1]#原始单词 k=int(a[-1])#序号 ans=[] for i in b: if sorted(i)==sorted(x) and i!=x: ans.append(i) ans=sorted(ans) print(len(ans)) if k<=len(ans): print(ans[k-1]) #试了下,过啦~ #过了之后我又回过头来思考 #上面的那个猜测如何证明呢? #大概可以这样: #如果两个单词字母已经完全相同,只是有n个字母位置不同 #那么从原始单词到目标单词(兄弟单词)的变化可以归结为如下过程 #找到其中一个错位的字母,在放到正确位置上去,这样会产生两个结果 #1、正好两个字母都归位,这样问题变成了n-2个字母位置不同 #2、只是归位了一个字母,这样问题变成了n-1个字母位置不同 #假设问题为S,可以得到这个公式: #S(n)->S(n-1) or S(n)->S(n-1) #这样通过递推一定可以将问题缩小为S(3)和S(2) #S(2)很好解决,将两个字母交换即可 #S(3)可以通过一次交换退化为S(2) #当然,上述论证只是针对【只允许两两交换】的情况 #如果可以顺便换,那不是直接起飞,不用论证了hahaha