CF1117E Decypher the String题解

传送门

神奇的题。

这是一道交互题。
给定一个字符串 s , 我们拥有若干操作 , 但是你不知道 , 第 i 个操作形如 ai,bi 表示交换字符串 s 中的第 ai 位和 aj 位。
比如操作序列依次为 (1,2),(2,3) ,给定字符串为 xyz
那么我们执行第一次操作后字符串变为 yxz ,而执行第3次操作后则变为 yzx
我们已经告知了你完成所有操作后的字符串序列,你需要还原其。
不过,你可以询问至多 3 次,每次询问你需要给出一个字符串,其长度与给定的字符串相等,然后我们会告诉你操作后的字符串序列。
数据范围:保证|s|104
输出答案需要加上 !
查询操作则需要加上 ?


首先我们直接忽略它的操作顺序。操作的结果可以看作给定一个数组 posi,操作后的串第 i 个字符实际上是原串的第 posi 个字符。

这个构造过于神奇了,所以直接写。

第一次:询问串 q1=R(az)。假设返回的串为 r1。把 az 看作 025,若 r1[i]=j,则必有 posij(mod26)。因为所有 j 都在原串 mod26=j 的位置上。

第二次:询问串 q2=R(ay),得到 posij(mod25)

第三次:询问串 q3=R(aw),得到 posij(mod23)

根据中国剩余定理,可以求出 posi26×25×23,因为 26×25×23>1000,所以可以唯一确定 posi,再倒回去还原即可。

posted @   FLY_lai  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示