字母 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, ...
随机推荐
- my36_InnoDB关键特性之change buffer
一.关于IOT:索引组织表 表在存储的时候按照主键排序进行存储,同时在主键上建立一棵树,这样就形成了一个索引组织表,一个表的存储方式以索引的方式来组织存储的. 所以,MySQL表一定要加上主键,通过主 ...
- 【Java基础】ExecutorService的使用
ExecutorService是java中的一个异步执行的框架,通过使用ExecutorService可以方便的创建多线程执行环境. 本文将会详细的讲解ExecutorService的具体使用. 创建 ...
- MFC入门示例之静态文本框、编辑框
点击按钮计算文本框中文本长度 void CMFCApplication1Dlg::OnBnClickedButton1() { CString strInput; GetDlgItemText(IDC ...
- Nginx区分浏览器
目录 一.简介 二.配置 一.简介 场景: 不同浏览器对网页的兼容性是不一样的,所以针对火狐和curl,返回不同内容 原理: 使用if对http_user_agent变量进行判断,这个变量会显示访问时 ...
- input type="file"多图片上传
单个的input type="file"表单也是可以实现多图片上传的 代码如下: <form action="manypic.php" method=&q ...
- C语言程序设计:二分查找(折半查找)
目录 C语言程序设计:二分查找(折半查找) 1.什么是二分查找 2.二分查找的优点 3.二分查找的缺点 4.二分查找原理 5.源代码实现 6.后话 C语言程序设计:二分查找(折半查找) 1.什么是二分 ...
- python 银行管理系统
这是一个使用python连接mysql的例子 涉及到类的使用 import pymysql import function as f def mysql(): db=pymysql.connect(h ...
- JAVA通过实体类生成数据库查询语句(驼峰命名规则)
import java.io.IOException; import java.lang.reflect.Field; import java.util.HashMap; import java.ut ...
- 移动端点击a标签拨打电话、发送短信
拨打电话 <a href="tel:88888888">888888</a> 发送短信 <a href="sms:电话号码"> ...
- 总结Vue 第四天:vue-cli(Vue2.0 新手入门 — 从环境搭建到发布)
总结Vue 第四天:vue-cli(Vue2.0 新手入门 - 从环境搭建到发布) 一.Vue CLI----(Vue2.0 新手入门 - 从环境搭建到发布): ■ CLI是Command-Lin ...