String Reversal
Educational Codeforces Round 96 (Rated for Div. 2) - E. String Reversal
题目描述
定义一个操作为交换字符串中相邻的两个字母
给定一个只含有小写字母的字符串 求出从原字符串到翻转之后的字符串需要多少次操作
输入
5
aaaza
输出
2
node
在第一个示例中,您必须交换第三个和第四个元素,因此字符串变为"aazaa"。
然后你必须交换第二个和第三个元素,所以字符串变成了"azaaa"。 因此,可以在两次交换中反转字符串。
分析
我们可以发现每次交换相邻的两个字符 这很像冒泡排序 (冒泡排序中最少的交换次数为 逆序对数
因此这道题就是让我们求逆序对数了,然而这道题有相同的字符出现的可能,就造成了有一些细节问题需要
处理
- 对于样例aaaza 我们可以把这个字符串等效为12345 然而逆序的如果是54321 这样显然是不对的, 因为我们相同
的字符在移动的时候肯定是最靠近的去移动,而不是最远的去移动 因此这个逆序应该是14235 这样显然就会有最小的
操作次数了. - 简单来说就是对于逆序的字符串来说, 某个字符从左到右的数字应该是从小到大排序的 比如样例的逆序为azaaa 显然我们
最左边的那个a 应该是我们所有a所代表的数字中的最小的 因此就是1 后面同理 (这样可以在满足题意的情况下最优
因此呢这道题就变成了一道求逆序对的题 我们可以用树状数组求解.
这里简单讲一下如何用树状数组求逆序对
- 我们把一个数组翻转之后, 我们每次查询这个数字之前的数字出现了多少次 就是原数组中以这个数字开头的逆序对数
- 我们倒序循环原来的数组, 每次求
a[i]的前n项和, 然后在树状数组中的这个下标+1即可
分享两道树状数组的例题 - Acwing 楼兰图腾
- 洛谷 逆序对
本题的代码
AC_CODE
#include <iostream>
#include <cstdio>
#include <vector>
#define pb push_back
#define lowbit(i) i & -i
using namespace std;
const int N = 2e5 + 10;
int n;
int tr[N];
long long ans;
vector<int> a[26], id(26);
void add(int x, int c) {
for(int i = x; i <= n; i += lowbit(i))
tr[i] += c;
}
int sum(int x) {
int res = 0;
for(int i = x; i; i -= lowbit(i)) res += tr[i];
return res;
}
int main() {
cin >> n;
string s; cin >> s;
for(int i = 0; i < n; i ++ ) a[s[i] - 'a'].pb(i + 1);
for(int i = 0; i < n; i ++ ) {
int p = s[i] - 'a';
ans += sum(a[p].back());
add(a[p].back(), 1);
a[p].pop_back();
}
cout << ans << endl;
}
String Reversal的更多相关文章
- Educational Codeforces Round 96 (Rated for Div. 2) E. String Reversal (思维,逆序对)
题意:给你一个字符串,每次可以调换现字符串的相邻两个字符,问最少操作多少次使得这个字符串等于其反转过来的字符串. 题解:先考虑字符串中没有相同字符的情况,那么我们每次将目前字符串的最后一个字符一直调换 ...
- CF1430 E. String Reversal(div 2)
题目链接:http://codeforces.com/contest/1430/problem/E 题意:有一串长度为n(n<=2*10^5)由小写字母组成的字符串,求通过相邻交换得到其反转串( ...
- Educational Codeforces Round 96 (Rated for Div. 2) E. String Reversal 题解(思维+逆序对)
题目链接 题目大意 给你一个长度为n的字符串,可以交换相邻两个元素,使得这个字符串翻转,求最少多少种次数改变 题目思路 如果要求数组排序所需要的冒泡次数,那其实就是逆序对 这个也差不多,但是如果是相同 ...
- ZOJ 1151 Word Reversal反转单词 (string字符串处理)
链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=151 For each list of words, output a l ...
- Word Reversal(string)
For each list of words, output a line with each word reversed without changing the order of the word ...
- 透过WinDBG的视角看String
摘要 : 最近在博客园里面看到有人在讨论 C# String的一些特性. 大部分情况下是从CODING的角度来讨论String. 本人觉得非常好奇, 在运行时态, String是如何与这些特性联系上的 ...
- JavaScript String对象
本编主要介绍String 字符串对象. 目录 1. 介绍:阐述 String 对象的说明以及定义方式. 2. 实例属性:介绍 String 对象的实例属性: length. 3. 实例方法:介绍 St ...
- ElasticSearch 5学习(9)——映射和分析(string类型废弃)
在ElasticSearch中,存入文档的内容类似于传统数据每个字段一样,都会有一个指定的属性,为了能够把日期字段处理成日期,把数字字段处理成数字,把字符串字段处理成字符串值,Elasticsearc ...
- [C#] string 与 String,大 S 与小 S 之间没有什么不可言说的秘密
string 与 String,大 S 与小 S 之间没有什么不可言说的秘密 目录 小写 string 与大写 String 声明与初始化 string string 的不可变性 正则 string ...
随机推荐
- Go语言核心36讲(新年彩蛋)--学习笔记
新年彩蛋 | 完整版思考题答案 基础概念篇 Go 语言在多个工作区中查找依赖包的时候是以怎样的顺序进行的? 答:你设置的环境变量GOPATH的值决定了这个顺序.如果你在GOPATH中设置了多个工作区, ...
- 从零搭建react hooks项目(github有源代码)
前言 首先这是一个react17的项目,包含项目中常用的路由.状态管理.less及全局变量配置.UI等等一系列的功能,开箱即用,是为了以后启动项目方便,特地做的基础框架,在这里分享出来. 这里写一下背 ...
- HDU 6470:Count(矩阵快速幂)
Count Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
- 第四十五个知识点:描述一些对抗RSA侧信道攻击的基础防御方法
第四十五个知识点:描述一些对抗RSA侧信道攻击的基础防御方法 原文地址:http://bristolcrypto.blogspot.com/2015/08/52-things-number-45-de ...
- Inverse/Implicit Function Theorem
目录 4.1 The Inverse Function Theorem The Implicit Function Theorem 4.3 Curves and Surfaces 4.4 The Mo ...
- [opencv]白平衡算法中的灰度世界法,改善图像发红发蓝发绿的现象
#include<iostream> #include <opencv2/opencv.hpp> #include <math.h> using namespace ...
- 【Linux】Linux安装Tomcat
1.下载Tomcat 链接:Tomcat下载链接 提取码:88ae 链接:Xshell下载链接 提取码:439l 2.创建一个文件夹,上传tomcat到此文件夹 [root@localhost bin ...
- Kafka基础教程(三):C#使用Kafka消息队列
接上篇Kafka的安装,我安装的Kafka集群地址:192.168.209.133:9092,192.168.209.134:9092,192.168.209.135:9092,所以这里直接使用这个集 ...
- django rest framework 自定义验证器
一.基于钩子函数: 官网上的例子: 官方提示:如果字段声明在序列化类上时,就具有参数required=Fasle的作用,当函数名中没有包括字段名时,那么这个验证函数就不起作用 二.基于类的验证器: 使 ...
- 第10组 Alpha冲刺 (2/6)
1.1基本情况 ·队名:今晚不睡觉 ·组长博客:https://www.cnblogs.com/cpandbb/ ·作业博客:https://edu.cnblogs.com/campus/fzu/FZ ...