题目描述
小明最近迷上了字符串操作。对每个字符串,小明每次可以执行以下两种操作之一:
- 把字符串的某个字符改成任意一个其他字符,花费 1 的代价;
- 交换字符串中的两个字符,花费 0 的代价。
小明发现,把一个字符串通过一系列的操作,可以转换成任何一个与之等长的字符串。
例如,把 hello 变为 world 的一种代价为 3 的操作序列如下:
- hello\arwello(替换 h 为 w,代价为 1)。
- wello\arwolle(交换 e 和 o,代价为 0)。
- wolle\arworle(替换 l 为 r,代价为 1)。
- worle\arworld(替换 e 为 d,代价为 1)。
小明发现,无法用少于 3 次的代价将 hello 变为 world。
显然,不同的转换方案花费的代价是不同的,请编程帮助小明计算把一个字符串变为另一个字符串的最小代价。
输入格式
一行两个用空格隔开的正整数 n(字符串长度),s0(数据生成器的初始数值)。
本题中的字符串根据给定的初始数值 s0 按以下规则生成:
for i=1 to nsi←(si−1×345)mod19997第二个字符串的第 i∈[1,n] 个字符的 ASCII 码为 97+(simod26)。
然后令 t0=sn。
for i=1 to nti←(ti−1×345)mod19997第二个字符串的第 i∈[1,n] 个字符的 ASCII 码为 97+(timod26)。
输出格式
一行一个非负整数,表示将第一个字符串转换为第二个字符串的最少代价。
提示
1≤n≤106,1≤s0≤19997。
本题原始满分为 20pts。