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的更多相关文章

  1. (2)apply函数及其源码

      本文原创,转载请注明出处,本人Q1273314690(交流学习) 总结: 就是MARGIN决定了你的FUN调用几次,每次传递给你的是什么维度的内容,而...是传递给FUN的(每次调用的时候都会被传 ...

  2. C++程序结构---1

    C++ 基础教程Beta 版 原作:Juan Soulié 翻译:Jing Xu (aqua) 英文原版 本教程根据Juan Soulie的英文版C++教程翻译并改编. 本版为最新校对版,尚未定稿.如 ...

  3. 你真的用好了Python的random模块吗?

    random模块 用于生成伪随机数 源码位置: Lib/random.py(看看就好,千万别随便修改) 真正意义上的随机数(或者随机事件)在某次产生过程中是按照实验过程中表现的分布概率随机产生的,其结 ...

  4. Agens层次聚类

    层次聚类是另一种主要的聚类方法,它具有一些十分必要的特性使得它成为广泛应用的聚类方法.它生成一系列嵌套的聚类树来完成聚类.单点聚类处在树的最底层,在树的顶层有一个根节点聚类.根节点聚类覆盖了全部的所有 ...

  5. fastadmin表单验证

    Unexpected token < in JSON at position 0 注意: if (!form.is("form"))//form的选择器不是form直接返回所 ...

  6. Python练手例子(3)

    13.打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身.例如:153是一个"水仙花数",因为153=1 ...

  7. R语言系列:生成数据

    R语言系列:生成数据 (2014-05-04 17:41:57) 转载▼ 标签: r语言 教育 分类: 生物信息 生成规则数据1.使用“:“,如x=1:10,注意该方法既可以递增也可以递减,如y=10 ...

  8. C 标准库 - ctype.h

    C 标准库 - ctype.h This header declares a set of functions to classify and transform individual charact ...

  9. python3基础06(随机数的使用)

    #!/usr/bin/env python# -*- coding:utf-8 -*- import osimport randomimport string la=[0,1,2,3,4,5,6,7, ...

随机推荐

  1. Dubbo多协议支持

    除了Dubbo服务暴露协议Dubbo协议外,Dubbo框架还支持另外8种服务暴露协议:RMI协议.Hessian协议.HTTP协议.WebService协议.Thrift协议.Memcached协议. ...

  2. MyEclipse配置Spring框架(基础篇)

    一.新建项目,添加spring的相关jar包等 二.创建相关类以及属性和方法 Student.java package com.yh; public class Student implements ...

  3. 玩转 Mockjs,前端也能跑的很溜

    ​ mockjs作用就是,生成随机模拟数据,拦截 ajax 请求,可以对数据进行增删改查.在生成数据时,我们就需要能够熟练使用 mock.js 的语法. Mockjs 的语法规范包括两部分:数据模板定 ...

  4. pipeline option指令

    目录 一.简介 二.参数 buildDiscarder checkoutToSubdirectory disableConcurrentBuilds newContainerPerStage retr ...

  5. Jenkins构建通知

    目录 一.简介 二.推送到gitlab 三.邮件通知 自带配置 Email Extension 四.钉钉通知 五.脚本钉钉通知 六.HTTP请求通知 一.简介 类似于监控报警,jenkins在配置持续 ...

  6. Jenkins 关闭和重启的实现方式

    关闭jenkins 只需要在访问jenkins服务器的网址url地址后加上exit.例如我jenkins的地址http://localhost:8080/ , 那么我只需要在浏览器地址栏上敲下 htt ...

  7. ORA-31633:unable to create master table "DP.SYS_EXPORT_FULL_11" ORA-01658

    问题描述:在进行数据泵进行数据库备份的时候,但是导出命令报错,环境是19C 4节点的rac 一体机.目前磁盘空间需要清理,清理之前先备份一下数据库 ORA-31626:job does not exi ...

  8. 转:Sed使用

    awk于1977年出生,今年36岁本命年,sed比awk大2-3岁,awk就像林妹妹,sed就是宝玉哥哥了.所以 林妹妹跳了个Topless,他的哥哥sed坐不住了,也一定要出来抖一抖. sed全名叫 ...

  9. Jetpack Compose的Modifier顺序问题

    一:前言 困惑起源于这段代码 Composable.clickable(点击1).clickable(点击2).size(100.dp).size(200.dp){ ............... } ...

  10. CSS选择器类型总结

    CSS选择器类型总结 1.通用选择器 一般用于给所有元素做一些通用性的样式设置,比如清除内边距.外边距等.但是效率比较低,尽量不要使用. * { margin: 0; padding: 0; } 2. ...