字母 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, ...
随机推荐
- virtualBox 系统移植
把virtualbox已经存在的系统移植到其他机器. 1.把系统如下文件考到一个安装了virtualbox的机器. 2.点击控制-->注册 然后浏览到复制的文件路径. 3.修改uuid 不管是l ...
- 【Linux】【Services】【SaaS】Docker+kubernetes(6. 安装和配置ceph)
1. 简介 1.1. 这个在生产中没用上,生产上用的是nfs,不过为了显示咱会,也要写出来 1.2. 官方网站:http://ceph.com/ 1.3. 中文网站:http://docs.ceph. ...
- 【Linux】【Services】【Docker】网络
容器的网络模型: closed container: 仅有一个接口:loopback 不参与网络通信,仅适用于无须网络通信的应用场景,例如备份.程序调试等: --net none bridged co ...
- 【Java 基础】Collectors 使用小结
Collectors 与集合转换 Collectors toList streamArr.collect(Collectors.toList()); List<Integer> colle ...
- OceanBase 2.x体验:推荐用DBeaver工具连接数据库
Original MQ4096 [OceanBase技术闲谈](javascript:void(0) 2020-01-15 OceanBase 2.x体验:推荐用DBeaver工具连接数据库 Ocea ...
- 36、有效的数独 | 算法(leetode,附思维导图 + 全部解法)300题
零 标题:算法(leetode,附思维导图 + 全部解法)300题之(36)有效的数独 前言 1)码农三少 ,一个致力于 编写极简.但齐全题解(算法) 的博主. 2)文末附赠 价值上百美刀 资料. 一 ...
- 小迪安全 Web安全 基础入门 - 第一天 - 操作系统&名词&文件下载&反弹SHELL&防火墙绕过
一.专业名词 1.POC:(Proof of Concept),即概念验证.漏洞报告中的POC是一段说明或一个攻击的样例使读者能够确认这个漏洞是真实存在的. 2.EXP:exploit,即漏洞利用.对 ...
- 『学了就忘』Linux系统定时任务 — 88、循环执行定时任务
目录 1.crond服务管理与访问控制 2.crontab命令的访问控制 3.用户级别的crontab命令 4.crontab命令的注意事项 5.系统的crontab设置 (1)/etc/cronta ...
- call this的范围
var f1=function(){this.a="类f1的实例的a属性"}; f1代表一个类: f1.a='对象f1的a属性'; var f2=function(){};//类f ...
- Chrome的强大搜索功能
前言 前几天一个好朋友求助我,大概问题是他的电脑QQ啥都能上网,就浏览器上不了网不是IE而是chrome,我第一反应可能是dns问题.后来发甩过来一张图,好家伙把我吓得,类似于下面这张图 这图是我自己 ...