• 一道通篇结论的傻逼题,被 lh 随手秒了
  • 别告诉我你不会 Div3 的题,你肯定在 fake
  • 没看过题解,以下做法纯属口胡,应该没问题

Description

  https://www.luogu.org/problem/CF1256F

Solution

  首先,若两个字符串的字符集不相同,答案必定是 no。

  由于 \(L\) 随便选取,我们又只需要判断 yes 或 no,不难发现任何 \(L\gt 2\) 的操作都可以拆成若干个 \(L=2\) 的操作。
  故当所有操作的 \(L\) 为 \(2\) 时(即每次交换相邻 \(2\) 位),若存在合法方案,则原问题存在合法方案(yes);否则原问题不存在合法方案(no)。
  首先,如果两个串中任意一个存在 \(2\) 个相同字符,则答案必定是 yes。因为你可以把这个串的这 \(2\) 个相同字符移到一起,然后在以后的每次操作中,对于这个串交换这两个字符,对于另一个串交换某 \(2\) 个相邻位,把另一个串逐步变成这个串。由于两串字符集相同,另一个串最终一定可以变成这个串。

  下面考虑两个串的串内 都不存在相同字符的情况。
  可以用类似的做法,一直交换第一个串的前 \(2\) 位,每次交换第二个串的某 \(2\) 个相邻位,把第二个串逐步变成第一个串。
  显然最后两个串要么相等,要么前 \(2\) 位相反。前一种情况的答案是 yes,后一种情况的答案是 no。
  即我们只需要判断第二个串变成第一个串 用了奇数次还是偶数次操作。
  我们发现没法求用了多少次操作,但我们可以给两个串同时加、减若干次操作,使其变得容易计算。
  由于两个串的串内 所有字符各不相同,我们可以让它们都变成上升序列,判断两个串各自变成上升序列的操作次数 奇偶性是否相同即可。(显然各自的操作次数是唯一的)
  为什么可以等价转化成这样呢?

  不难发现,由于两个串字符集相同,且每个串内所有字符各不相同,所以两个串各自把所有字符从小到大排序后 得到的串相同。
  把两个串都变成升序后,我们可以对两个串分别后接相同次交换操作,使它们都变成原来的第一个串。
  这些后接的交换操作 可能会与之前的某些交换操作相反,比如之前交换了一次第 \(3,4\) 位,现在又交换了一次第 \(3,4\) 位。这两次操作显然可以抵消,因为一个操作序列中,任意两次交换操作 都可以交换(可以自己验证一下),我们可以把这两次操作交换到相邻位置,此时这两个相邻相反操作就显然可以抵消了。
  抵消完后,第一个串所有操作都被抵消了(因为你把第一个串变成升序后又变回去了),第二个串剩余的操作就是其原串变成第一个串所需的次数。
  后接交换操作 不会影响两个串的操作次数的奇偶关系,最后第一个串的操作次数被抵消成了 \(0\)(偶数),若第二个串的操作次数为奇数,则答案为 no,因为你每次操作要顺带交换第一个串的相邻两位,但第一个串操作奇数次后不可能和原来一样;若第二个串的操作次数为偶数,则答案为 yes。
  故,若两个串各自变成上升序列的操作次数 奇偶性相同,答案为 yes;否则答案为 no。

  现在问题转化成了求两个串变成上升序列 需要多少次操作。
  这又是一个经典的经验考察,结论是逆序对个数。
  证明(本来我忘了,我现场花了点时间重新发明的):一个序列不为升序时,必定存在两个相邻的逆序字符,而交换这两位会使逆序对数 \(-1\)(因为只有这两位字符的相对顺序变了,这两位与序列中其它位字符的相对顺序没变)。
  于是直接求逆序对个数就行了。实际上此时串长不超过 \(26\),怎么做都可以,多组数据的最坏时间是 \(O(26\sum n)\)……

  口胡,所以没代码。

【CF598 Div3 F】Equalizing Two Strings的更多相关文章

  1. 【图灵杯 F】一道简单的递推题(矩阵快速幂,乘法模板)

    Description 存在如下递推式: F(n+1)=A1*F(n)+A2*F(n-1)+-+An*F(1) F(n+2)=A1*F(n+1)+A2*F(n)+-+An*F(2) - 求第K项的值对 ...

  2. 【CF1256F】Equalizing Two Strings(逆序对)

    题意:给定两个长度均为n且由小写字母组成的字符串,可以进行若干次操作,每次从两个串中分别选一个长度相等的子串进行翻转,问是否存在能使两串相等的一系列操作方案 n<=2e5 思路:首先如果每种字母 ...

  3. 【C++竞赛 F】yyy的三角形

    时间限制:2s 内存限制:32MB 问题描述 yyy对三角形非常感兴趣,他有n个木棍,他正在用这些木棍组成三角形.这时xxx拿了两根木棍过来,xxx希望yyy能给他一根木棍,使得xxx可以组成一个三角 ...

  4. 【Cf #502 F】The Neutral Zone

    本题把$log$化简之后求得就是每个质数$f$前的系数,求系数并不难,难点在于求出所有的质数. 由于空间限制相当苛刻,$3e8$的$bitset$的内存超限,我们考虑所有的除了$2$和$3$以外的质数 ...

  5. 【刷题-LeetCode】205. Isomorphic Strings

    Isomorphic Strings Given two strings *s* and *t*, determine if they are isomorphic. Two strings are ...

  6. 【ATcoder s8pc_3 F】 寿司

    http://s8pc-3.contest.atcoder.jp/tasks/s8pc_3_f (题目链接) 题意 有一个长度为$N$的数列$A$,初始为$0$.$Q$次操作,每次两个参数$x,y$. ...

  7. CF598: div3解题报告

    CF598:div3解题报告 A: Payment Without Change 思路: 按题意模拟即可. 代码: #include<bits/stdc++.h> using namesp ...

  8. 【CF1256】Codeforces Round #598 (Div. 3) 【思维+贪心+DP】

    https://codeforces.com/contest/1256 A:Payment Without Change[思维] 题意:给你a个价值n的物品和b个价值1的物品,问是否存在取物方案使得价 ...

  9. 【Wannafly挑战赛4】F 线路规划 倍增+Kruskal+归并

    [Wannafly挑战赛4]F 线路规划 题目描述 Q国的监察院是一个神秘的组织.这个组织掌握了整个帝国的地下力量,监察着Q国的每一个人.监察院一共有N个成员,每一个成员都有且仅有1个直接上司,而他只 ...

随机推荐

  1. 重写equals方法需要知道的事

    重写equals方法 相信在每个人都有过重写过java的equals的方法的经历.这篇博文就从以下几个方面说明重写equals方法的原由,与君共进步. 一 为什么要重写equals方法 首先我们了解e ...

  2. whereis which type find

    1. whereis  name whereis命令只能用于搜索程序名,而且只搜索二进制文件(参数-b).man说明文件(参数-m)和源代码文件(参数-s).如果省略参数,则返回所有信息. 2. wh ...

  3. 部署zabbix监控平台(源码安装)

    案例:部署Zabbix监控平台 1 问题 本案例要求部署一台Zabbix监控服务器,一台被监控主机,为进一步执行具体的监控任务做准备: 安装LNMP环境 源码安装Zabbix 安装监控端主机,修改基本 ...

  4. DB2分页

    前言 最近在做一个DB2的项目,遇到分页处理的设计时开始犯难.以前一直采用MySQL作为项目数据库,其中的Limit关键字非常人性化,MySQL把分页的处理逻辑封装到了数据库的核心中,使得做查询设计时 ...

  5. Java学习笔记-流程控制

    在Java中,最常见的就是顺序结构,另外,还有其他的一些的结构,选择,循环等,这些程序结构的加入,使得程序代码更有选择性 判断结构 if语句 三种格式: if(条件表达式) { 执行语句; } if( ...

  6. BootStrap Table方法使用小结

    参考链接:https://www.cnblogs.com/Amaris-Lin/p/7797920.html

  7. spring中@Conditional注解

    @Conditional是Spring4新提供的注解,它的作用是根据某个条件加载特定的bean. 我们需要创建实现类来实现Condition接口,这是Condition的源码 public inter ...

  8. Mybatis插件之Mybatis-Plus的实体类注解篇

    主要注释到实体类上的注解: @TableName(value = …) 当数据库名与实体类名不一致或不符合驼峰命名时,需要在此注解指定表名 @TableId(type = …) 指定实体类的属性为对应 ...

  9. There are no packages available

    { "bootstrapped": true, "channels": [ "https://raw.githubusercontent.com/Ja ...

  10. 《鸟哥的Linux私房菜:服务器搭建篇》第一部分学习笔记

    零.问题集 1. 我们购买网络时,有4M.5M.8M.10M乃至100M,运营商是如何控制每个用户的带宽的? 一.网络基础概念 1. 交换器与集线器最大的差异,在于交换器内有一个特别的内存, 这个内存 ...