字母 Letters
D. 字母 Letters
内存限制:256 MiB
时间限制:500 ms
标准输入输出
题目类型:传统
评测方式:文本比较
题目描述
给定两个长度相同且由大写英文字母组成的字符串 A 和 B,保证 A 和 B 中每种字母出现的次数相同。
每次可以交换 A 中相邻两个字符,求最少需要交换多少次可以使得 A 变成 B。
输入格式
第一行一个正整数 ,表示字符串的长度。
第二行和第三行各一个长度为 的字符串,并且只包含大写英文字母。
输出格式
一个非负整数,表示最少的交换次数。
样例
样例输入
3
ABC
BCA
样例输出
2
数据范围与提示
对于 的数据保证 .
对于所有数据保证 .
Task author: Marian M. Kedzierski.
题目分析
1.首先有一种很明显的思路:按照a,或b,其中一个为基准,把另一个字符串的值改为他的顺序,然后就是简单的逆序对
scanf("%s", s + 1);
scanf("%s", b + 1);
for (int i = 1; i <= n; i++) {
val[b[i]] = i;
}
for (int i = 1; i <= n; i++) {
a[i] = val[s[i]];
}
不过,类似AABB ABAB就行不通了
2.这里有一个贪心的思路:就近原则
简单来说就是,不能将相同字符设为同一个值,谁更近,他的价值就越大,也就是值越小
3.于是,这道题的难点就是在初始化,利用ASCLL码,以及只有大写字母
for(int i=1;i<=n;i++)
{
jl[i]=p[s[i]-'A'+1];
p[s[i]-'A'+1]=i;
}
for(int i=n;i>=1;i--)
{
a[i]=p[b[i]-'A'+1];
p[b[i]-'A'+1]=jl[p[b[i]-'A'+1]];
}
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
long long int n, m;
char s[10000005];
char b[10000005];
long long val[100005];
long long int a[1000005];
long long int lsh[1000005];
long long int Bit[1000005];
bool flag[10000005];
long long p[10000005];
long long jl[10000005];
long long int pd, l, r, x;
long long int cnt;
long long int ans1;
long long int ans2;
long long int lowbit(long long x) { return x & (-x); }
void update(long long k, long long x) {
for (int i = k; i <= n; i += lowbit(i)) {
Bit[i] += x;
}
}
long long Sum(long long k) {
long long ans = 0;
for (int i = k; i >= 1; i -= lowbit(i)) {
ans += Bit[i];
}
return ans;
}
void read(long long &x)
{
int f=1;
x=0;
char s=getchar();
while(s<'0'||s>'9')
{
if(s=='-')
{
f=-1;
}
s=getchar();
}
while(s>='0'&&s<='9')
{
x=x*10+(s-48);
s=getchar();
}
x*=f;
}
int main() {
read(n);
scanf("%s",s+1);
scanf("%s",b+1);
for(int i=1;i<=n;i++)
{
jl[i]=p[s[i]-'A'+1];
p[s[i]-'A'+1]=i;
}
for(int i=n;i>=1;i--)
{
a[i]=p[b[i]-'A'+1];
p[b[i]-'A'+1]=jl[p[b[i]-'A'+1]];
}
for (int i = 1; i <= n; i++) {
update(a[i], 1);
ans1+=i - Sum(a[i]);
}
printf("%lld", ans1);
}
字母 Letters的更多相关文章
- (2)apply函数及其源码
本文原创,转载请注明出处,本人Q1273314690(交流学习) 总结: 就是MARGIN决定了你的FUN调用几次,每次传递给你的是什么维度的内容,而...是传递给FUN的(每次调用的时候都会被传 ...
- C++程序结构---1
C++ 基础教程Beta 版 原作:Juan Soulié 翻译:Jing Xu (aqua) 英文原版 本教程根据Juan Soulie的英文版C++教程翻译并改编. 本版为最新校对版,尚未定稿.如 ...
- 你真的用好了Python的random模块吗?
random模块 用于生成伪随机数 源码位置: Lib/random.py(看看就好,千万别随便修改) 真正意义上的随机数(或者随机事件)在某次产生过程中是按照实验过程中表现的分布概率随机产生的,其结 ...
- Agens层次聚类
层次聚类是另一种主要的聚类方法,它具有一些十分必要的特性使得它成为广泛应用的聚类方法.它生成一系列嵌套的聚类树来完成聚类.单点聚类处在树的最底层,在树的顶层有一个根节点聚类.根节点聚类覆盖了全部的所有 ...
- fastadmin表单验证
Unexpected token < in JSON at position 0 注意: if (!form.is("form"))//form的选择器不是form直接返回所 ...
- Python练手例子(3)
13.打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身.例如:153是一个"水仙花数",因为153=1 ...
- R语言系列:生成数据
R语言系列:生成数据 (2014-05-04 17:41:57) 转载▼ 标签: r语言 教育 分类: 生物信息 生成规则数据1.使用“:“,如x=1:10,注意该方法既可以递增也可以递减,如y=10 ...
- C 标准库 - ctype.h
C 标准库 - ctype.h This header declares a set of functions to classify and transform individual charact ...
- python3基础06(随机数的使用)
#!/usr/bin/env python# -*- coding:utf-8 -*- import osimport randomimport string la=[0,1,2,3,4,5,6,7, ...
随机推荐
- SpringBoot(4):整合Mybatis
1. 导入mybatis所需要的依赖 1 <!-- 引入 myBatis,这是 MyBatis官方提供的适配 Spring Boot的--> 2 <dependency> 3 ...
- springboot-devtools实现项目的自动重启
热部署的引入依赖: <!-- 热部署 --> <dependency> <groupId>org.springframework.boot</groupId& ...
- 【经验分享】win10 cmake 构建 Tengine 工程
欢迎关注我的公众号 [极智视界],回复001获取Google编程规范 O_o >_< o_O O_o ~_~ o_O 本教程详细记录了在 win10 环境中 ...
- C++11 标准库 bind 函数
bind 是什么? bind 顾名思义: 绑定 通俗来讲呢,可以这么理解有点像函数指针的意思. 资料上是这么讲的:可以将 bind 函数看做一个通用函数的适配器,它接受一个可调用对象,生成一个新的可以 ...
- Boss直聘App上“天使投资、VC、PE” 与“A轮、B轮、C轮融资”的关系
我们经常看到朋友圈里某某公司获得了某轮融资,所谓的A轮B轮究竟是个什么概念呢?今天就跟小伙伴们分享一下A.B.C.D轮融资与天使投资.VC.PE的关系. 天使投资(AI):天使投资所投的是一些非常早期 ...
- 第44篇-为native方法设置解释执行入口
对于Java中的native方法来说,实际上调用的是C/C++实现的本地函数,由于可能会在Java解释执行过程中调用native方法,或在本地函数的实现过程中调用Java方法,所以当两者相互调用时,必 ...
- Wireshark(三):应用Wireshark IO图形工具分析数据流
原文出处: EMC中文支持论坛 基本IO Graphs: IO graphs是一个非常好用的工具.基本的Wireshark IO graph会显示抓包文件中的整体流量情况,通常是以每秒为单位(报文数或 ...
- mysql的MVCC多版本并发控制机制
MVCC多版本并发控制机制 全英文名:Multi-Version Concurrency Control MVCC不会通过加锁互斥来保证隔离性,避免频繁的加锁互斥. 而在串行化隔离级别为了保证较高的隔 ...
- mkdir创建目录时,如果上级目录没有是创建不成功的
mkdir创建目录时,如果上级目录没有是创建不成功的 ,此时必须用 mkdirs()方法方可.
- [WPF] 实现 WPF 的 Inner Shadow
在 WPF 中,我们通常用 DropShadow 做阴影效果,但都是做外阴影.内阴影(Inner Shadow)的话其实也不是不可以,就是有些曲折.这篇文章介绍几种做内引用的做法. 文章涉及到以下概念 ...