2789: [Poi2012]Letters
来源:互联网 发布:兄弟连培训学校知乎 编辑:程序博客网 时间:2024/06/05 16:42
2789: [Poi2012]Letters
Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 417 Solved: 267
[Submit][Status][Discuss]
Description
给出两个长度相同且由大写英文字母组成的字符串A、B,保证A和B中每种字母出现的次数相同。
现在每次可以交换A中相邻两个字符,求最少需要交换多少次可以使得A变成B。
Input
第一行一个正整数n (2<=n<=1,000,000),表示字符串的长度。
第二行和第三行各一个长度为n的字符串,并且只包含大写英文字母。
Output
一个非负整数,表示最少的交换次数。
Sample Input
3
ABC
BCA
ABC
BCA
Sample Output
2
HINT
ABC -> BAC -> BCA
Source
鸣谢 oimaster
#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>#include<vector>#include<queue>#include<set>#include<map>#include<stack>#include<bitset>#include<ext/pb_ds/priority_queue.hpp>using namespace std;const int maxn = 1E6 + 10;typedef long long LL;struct data{int num,pos; data(){}data(int num,int pos): num(num),pos(pos){}bool operator < (const data &b) const {return num < b.num;}}D[maxn];int n,tail[26],Num[maxn],c[maxn];char A[maxn],B[maxn];LL Ans;vector <int> v[26];int Sum(int pos){int ret = 0;for (int i = n; i > 0; i -= i&-i) ret += c[i];for (int i = pos; i > 0; i -= i&-i) ret -= c[i];return ret;}void Insert(int pos){for (int i = pos; i <= n; i += i&-i) ++c[i];}int main(){#ifdef DMCfreopen("DMC.txt","r",stdin);#endifcin >> n; scanf("%s",A + 1); scanf("%s",B + 1);for (int i = 1; i <= n; i++)v[B[i] - 'A'].push_back(i);for (int i = 1; i <= n; i++){int now = A[i] - 'A';int num = v[now][tail[now]++];D[i] = data(num,i);}sort(D + 1,D + n + 1);for (int i = 1; i <= n; i++)Ans += 1LL*Sum(D[i].pos),Insert(D[i].pos);cout << Ans;return 0;}
0 0
- BZOJ 2789: [Poi2012]Letters
- [BZOJ 2789]POI2012 Letters
- bzoj 2789: [Poi2012]Letters
- 2789: [Poi2012]Letters
- 2789: [Poi2012]Letters
- BZOJ 2789: [Poi2012]Letters
- BZOJ 2789 Poi2012 Letters 树状数组
- bzoj 2789 [Poi2012]Letters 树状数组
- bzoj 2789 [Poi2012]Letters 求逆序对
- 【POI2012】【BZOJ2789】Letters
- BZOJ2789: [Poi2012]Letters
- BZOJ2789: [Poi2012]Letters
- 【bzoj2789】 [Poi2012]Letters
- 【bzoj2789】[Poi2012]Letters
- bzoj 2789: [Poi2012]Letters 树状数组求逆序对
- 【BZOJ】【P2789】【Poi2012】【Letters】【题解】【逆序对】
- 【BZOJ2789】【树状数组】[Poi2012]Letters 题解
- [BZOJ2789][Poi2012]Letters(树状数组求逆序对)
- 求个靠谱的android studio教程
- 矩形
- android开发真机通过局域网连接本地服务器测试的问题?
- 欢迎使用CSDN-markdown编辑器
- 我一访问网站,对应的应用程序池就停止了,怎么回事啊?
- 2789: [Poi2012]Letters
- java中nextLine()和next()的区别
- SwipeRefreshLayout 的基本使用,自动刷新和上拉加载更多
- Spark2.0源码阅读---spark源码编译与IDEA导入搭建阅读环境
- 如何学习算法
- 程序员面试金典——输出单层节点
- asp能否打开文件头被修改过的文件头的图?
- Shell01
- 管道