[ POI 2012 ] Letters
\(\\\)
\(Description\)
给出两个长度为 \(N\) 的字符串\(S_1,S_2\),且保证两个字符串中每一个字符出现次数相同。
现在一次操作可以交换相邻的两个字符,问将 \(S_2\) 变成 \(S_1\) 最少需要交换多少次。
- \(N\le 10^6\)
\(\\\)
\(Solution\)
假如一共出现了五个 \(A\) ,那一定是按照顺序移动,即\(S_2\)中第一个出现的 \(A\) 最后一定会移动到\(S_1\)中第一个出现的 \(A\) 处。
然后就是逐一匹配的问题了。
以第一个串每一个字符的位置做为权值绑在第二个串对应字符的位置上,相当于将第一个串的 \(id\) 按照第二个串的位置打乱再冒泡排序。
然后根据冒泡排序的原理,这个序列的逆序对数就是交换次数。
\(\\\)
\(Code\)
#include<cmath>
#include<vector>
#include<cstdio>
#include<cctype>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 1000010
#define R register
#define gc getchar
using namespace std;
typedef long long ll;
inline ll rd(){
ll x=0; bool f=0; char c=gc();
while(!isdigit(c)){if(c=='-')f=1;c=gc();}
while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=gc();}
return f?-x:x;
}
ll n,ans,s[N],ptr[30];
vector<int> p[30];
struct BIT{
ll c[N];
inline int lowbit(ll x){return x&-x;}
inline void add(ll p,ll x){for(;p<=N;p+=lowbit(p)) c[p]+=x;}
inline ll query(ll p){
ll res=0;
for(;p;p-=lowbit(p)) res+=c[p];
return res;
}
}bit;
int main(){
n=rd();
char c=gc();
for(R int i=1;i<=n;++i){
while(!isalpha(c)) c=gc();
p[c-'A'+1].push_back(i); c=gc();
}
for(R int i=1;i<=n;++i){
while(!isalpha(c)) c=gc();
s[i]=p[c-'A'+1][ptr[c-'A'+1]];
++ptr[c-'A'+1]; c=gc();
}
for(R int i=n;i;--i){
ans+=bit.query(s[i]);
bit.add(s[i],1);
}
printf("%lld\n",ans);
return 0;
}
[ POI 2012 ] Letters的更多相关文章
- 解题:POI 2012 Well
题面 比较明显地能看出二分来,但是检查函数很难写.对于二分出的一个$mid$,我们要让它满足在$m$次操作内令序列中存在一个为零的位置,同时使得任意相邻的两项之差不超过$mid$ 第二项的检查比较好做 ...
- 解题:POI 2012 Cloakroom
题面 首先,单独处理每个询问复杂度显然不可承受,还是考虑通过排序使得限制更容易达到:按照$a$将物品排序,按照$m$将询问排序,这样肯定是要不断添加物品才能达到要求,顺着做一遍就行了 然后发现$b$的 ...
- 【BZOJ 2803】【POI 2012】Prefixuffix
http://www.lydsy.com/JudgeOnline/problem.php?id=2803 核心思想是利用单调性. 因为长度为L的前缀和后缀循环同构是AB和BA的形式,我们设\(f(i) ...
- POI题解整合
我也不知道为啥我就想把POI的题全都放到一篇blog里写完. POI 2005 SAM-Toy Cars 贪心,每次选下次出现最晚的. POI 2006 KRA-The Disks 箱子位置单调,所以 ...
- USACO 2012 December ZQUOJ 24122 Scrambled Letters(二分)
题意:有一个字典序名单,现在把这些名单的顺序和名字的字符顺序扰乱了,要输出原先的名字在原来的名单中的最低和最高位置. 分析:先将所有的名字串按字典序从小到大和从大到小分别排序smin[]和smax[] ...
- 关于用POI和EXCEL交互的问题
废话不多说,直接通过例子来说明POI的使用: 1.一个创建excel并写入数据的小例子,参照网上的一个例子: public class CreateXL { /** * @param args */ ...
- 关于 HSSF 和 XSSF 功能的开发者入门指南 (Apache POI 操作 Excel)
关于 HSSF 和 XSSF 功能的开发者入门指南 笔者深夜无眠,特此对本文翻译一部分,未完成部分待后续更新 本文源文地址 意欲使用 HSSF 和 XSSF 功能快熟读写电子表格?那本文就是为你而写的 ...
- 【Tech】POI标签分类
寒假老板给的任务,让我重现这个实验http://www.liuhaihua.cn/archives/15565.html.自己就随便试了下,用的都是比较经典(lao)的算法和知识,记录一下. 一.从网 ...
- java+poi实现word转html显示
直入正题,需求为页面预览word文档,用的是poi3.8,以下代码支持表格.图片,不支持分页,只支持doc,不支持docx: 1.导jar包 2.java文件 /** * */ import java ...
随机推荐
- tplink wr886n v5.0 ttl 接线方法
我的倒是有ttl信息,但是全是乱码,换过RX和TX,也换过串口速率都没用,附上TTL接线图. ==================================2016-11-02========= ...
- Lua:ipairs和pairs的区别
ipairs 和pairs在lua中都是遍历tbale的函数但是两者有区别 1.pairs遍历table中的所有的key-vale 而ipairs会根据key的数值从1开始加1递增遍历对应的table ...
- 【nginx】【转】正向代理与反向代理的区别[
转自: http://blog.csdn.net/m13666368773/article/details/8060481 正向代理的概念 正向代理,也就是传说中的代理,他的工作原理就像一个跳板,简单 ...
- CodeIgniter RestServer中put请求获取不到參数的问题解决
近期用restserver遇到个蛋疼的问题,发现$this->put得到的參数都是null.查了一下发现.这貌似这个普遍问题,參见链接:https://github.com/chriskacer ...
- jquery中怎样防止冒泡事件
jquery中怎样防止冒泡事件 1.利用event.stopPropagation() 2.利用return false 3.利用event.preventDefault()
- linux switch_root
1 命令格式 switch_root newroot init 跳转到另外一个文件系统,并且把newroot作为新的mount tree,并且执行init程序. 2 特殊要求 newroot必须是一个 ...
- 实现一个简易的express中间件
代码: // 通过闭包实现单例 const Middlewave = (function(){ let instance; class Middlewave{ constructor() { this ...
- 第二步:将LAD结果的属性值二(多)值化,投入计算模型
一文详解LDA主题模型 - 达观数据 - SegmentFault 思否 https://segmentfault.com/a/1190000012215533 SELECT COUNT(1) FRO ...
- ExpandableListView的首次加载全部展开,并且点击Group不收缩、
最近在做Android市场的应用.看到好多市场类的QQ应用宝做的算是最完美的了.在项目中要实现它的下载管理的实现,而界面如下: 反编译得到使用的是ExpandableListView.而怎么首次加载全 ...
- ThinkAndroid框架
ThinkAndroid简介 ThinkAndroid是一个免费的开源的.简易的.遵循Apache2开源协议发布的Android开发框架,其开发宗旨是简单.快速的进行 Android应用程序的开发,包 ...