题目大意

考虑一个未知的长为 $n$($2\le n\le 5000$)由小写英文字母构成的字符串 $s$ 。给出 $k$($1\le k\le 2500$,$nk\le 5000$)个字符串 $s_1, s_2, \dots, s_k$,$s_i$ 由 $s$ 通过交换 $s[x_i]$ 和 $s[y_i]$($x_i \ne y_i$ )得到。求 $s$,若有多解输出任意一个接,无解输出 -1

解法

假设输入的 $k$ 个串不全相等。(否则平凡)
取 $s_1$、$s_2$,$s_1\ne s_2$ 。(此 $s_1, s_2$ 并非指输入的 $s_1, s_2$ 。)
设 $i$ 是两者不相同的第一个位置,则二者中至少有一个的「交换位置」包含 $i$ 。
据此,可以先假设 $s_1$ 的一个交换位置是 $i$ ,枚举 $s_1$ 的另一个交换位置,进行检验。
若不可能,再假设 $s_2$ 的一个交换位置是 $i$ ,枚举 $s_2$ 的另一个交换位置。
这种做法的时间复杂度为 $O(kn + n^{2}k)$,可接受。

TODO
能否进一步缩小可能的交换位置的范围(candidate swapping index pair),下面尝试讨论这一问题。

不失一般性,设 $s_1$ 的交换位置为 $(i, j)$,$s_2$ 的交换位置为 $(i', j')$ 。

分类讨论:

  1. $i$ 不是 $s_1$ 的第一个交换位置,即 $j < i$ 。
    1.1 $s_1[i] = s_1[j]$
    1.2 $s_1[i] \ne s_1[j]$
  2. $i$ 是 $s_1$ 的第一个交换位置,即 $j > i$ 。

转载于:https://www.cnblogs.com/Patt/p/8046836.html

Codeforces 903E Swapping Characters相关推荐

  1. Codeforces903E Swapping Characters

    题意:n个字符串,每个字符串长度为m(n*m<=5000),每个字符串必须移动两个字符串变成相同的字符串,问最后相同字符串是什么 题解:一开始hash,极限数据会T,正解是把第一个字符串看做静止 ...

  2. Distinct Characters Queries CodeForces - 1234D(线段树求区间字母种类数)

    You are given a string ss consisting of lowercase Latin letters and qq queries for this string. Reca ...

  3. Codeforces 982 B. Bus of Characters(模拟一个栈)

    解题思路: 排序之后模拟一个栈(也可以用真的栈),时间复杂度o(n). 代码: #include <bits/stdc++.h> using namespace std; typedef ...

  4. Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈)

    Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈) 标签: codeforces 2017-06-02 11:41 29人阅读 ...

  5. Codeforces Round #300 A. Cutting Banner 水题

    A. Cutting Banner Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/538/pro ...

  6. 【Codeforces】Round #375 (Div. 2)

    Position:http://codeforces.com/contest/723 我的情况 啊哈哈,这次raiting肯定要涨,接受过上次的教训,先用小号送肉,大号都是一发切,重回蓝咯 结果... ...

  7. Codeforces Round #348 (VK Cup 2016 Round 2, Div. 2 Edition) B. Little Artem and Grasshopper 模拟题...

    B. Little Artem and Grasshopper 题目连接: http://www.codeforces.com/contest/669/problem/B Description Li ...

  8. Codeforces Beta Round #92 (Div. 1 Only) A. Prime Permutation 暴力

    A. Prime Permutation 题目连接: http://www.codeforces.com/contest/123/problem/A Description You are given ...

  9. Codeforces Round #324 (Div. 2) E. Anton and Ira 贪心

    E. Anton and Ira Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/584/probl ...

最新文章

  1. linux下将多个文件去除文件头合并_shell命令实现当前目录下多个文件合并为一个文件的方法...
  2. gdb coredump
  3. python教材免费版-北大内部教材python版算法与数据结构PDF电子书免费下载
  4. 现代操作系统: 第一章 引言
  5. ffmpeg解码流程 turorial5详解
  6. IntelliJ IDEA 工具篇之如何切换 git 分支
  7. HDU2206:IP的计算
  8. CSS:结合clip-path实现目录的隐藏显示以及提示框的隐藏显示
  9. 计算机wind10切换桌面wind7系统,win10多桌面切换的方法以及开启步骤是怎样的
  10. 微服务架构学习笔记(一):gRPC Spring Boot Starter 2.2.0 发布,及使用步骤
  11. java中 成员变量和属性的区别
  12. diy家庭文件服务器,DIY家庭云服务器
  13. console接口(console接口定义)
  14. 价值4800的电销语音机器人完整版源码+文字教程
  15. 逆时针旋转某一角度的旋转矩阵
  16. ESL第七章 模型评估及选择 【期望】测试误差、模型偏差估计偏差、【平均】乐观、AIC、参数有效数、BIC、最小描述长度、VC/结构风险最小化、一标准误差准则/广义交叉验证、【留一】自助/.632估计
  17. 电脑出现An operating system wasn‘t found,please to Ctrl+alt+del如何解决
  18. mysql字符集与校对规则设置_MySQL 字符集与校对规则
  19. 基于cobra的go语言命令行解析器
  20. 从今日头条抄袭到京东水逆,为何互联网公司人设会接连崩塌?

热门文章

  1. 机器学习分类指标:精确率、准确率、召回率详解
  2. Pinia轻量级状态管理
  3. python内置库之学习ctypes库(二)
  4. pytorch 优化器 机器学习 调参
  5. LeetCode简单题之字符串中的单词数
  6. gst-crypto GStreamer插件
  7. EventBus的粘性事件原理
  8. 数据治理(三):数据质量管理
  9. Ubuntu 系统使用命令打开某个目录下的代码文件
  10. android 字体上添加横线,字体下面添加下划线