BZOJ2789 : [Poi2012]Letters】的更多相关文章

按照顺序依次找到b串每个字母最后的位置,然后求逆序对. #include<cstdio> #define N 1000010 int n,i,j,k,g[26],nxt[N],bit[N];char a[N],b[N];long long ans; int main(){ for(scanf("%d",&n),gets(a),gets(a+1),gets(b+1),i=1;i<=n;g[a[i]]=i++)nxt[i]=g[a[i]-='A']; for(i=…
题目链接 BZOJ 题解 如果我们给\(A\)中所有字母按顺序编号,给\(B\)中所有字母编上相同的号码 对于\(B\)中同一种,显然号码应该升序 然后求逆序对即可 #include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<vector> #include<cmath> #include<map> #define R…
处理数组A,A[i]表示字符串a的第i个字符排序后应去的位置,队列可. 对于多次出现的字符,其在a中的顺序和在b中的顺序应该是一一对应的. #include<cstdio> #include<queue> using namespace std; #define N 1000001 typedef long long ll; queue<int>qs[26]; ll ans; int n,A[N]; char a[N],b[N]; int d[N]; void Upda…
[BZOJ2789][Poi2012]Letters Description 给出两个长度相同且由大写英文字母组成的字符串A.B,保证A和B中每种字母出现的次数相同. 现在每次可以交换A中相邻两个字符,求最少需要交换多少次可以使得A变成B. Input 第一行一个正整数n (2<=n<=1,000,000),表示字符串的长度. 第二行和第三行各一个长度为n的字符串,并且只包含大写英文字母. Output 一个非负整数,表示最少的交换次数. Sample Input 3 ABC BCA Samp…
Letters bzoj-2789 Poi-2012 题目大意:给定两个字符串A和B,每次交换A中相邻两个数.问至少交换多少次,可以将A变成B. 注释:$2\le n\le 10^6$ 想法:我们发现,A中任意两个相同字符的相对位置是不会发生改变的,所以我们可以直接求逆序对即可. 最后,附上丑陋的代码... ... #include<iostream> #include<cstdio> #include<vector> using namespace std; cons…
2789: [Poi2012]Letters Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 278  Solved: 185[Submit][Status][Discuss] Description 给出两个长度相同且由大写英文字母组成的字符串A.B,保证A和B中每种字母出现的次数相同. 现在每次可以交换A中相邻两个字符,求最少需要交换多少次可以使得A变成B. Input   第一行一个正整数n (2<=n<=1,000,000),表示字符串的…
直接求逆序对就行了...时间复杂度O(nlogn) ------------------------------------------------------------------------- #include<bits/stdc++.h>   using namespace std;   #define idx(c) ((c) - 'A') #define lowbit(x) ((x) & -(x))   const int charset = 26; const int ma…
题目描述 给出两个长度相同且由大写英文字母组成的字符串A.B,保证A和B中每种字母出现的次数相同. 现在每次可以交换A中相邻两个字符,求最少需要交换多少次可以使得A变成B. 输入 第一行一个正整数n (2<=n<=1,000,000),表示字符串的长度. 第二行和第三行各一个长度为n的字符串,并且只包含大写英文字母. 输出 一个非负整数,表示最少的交换次数. 样例输入 3 ABC BCA 样例输出 2 题解 树状数组求逆序对 一个结论:将序列A通过交换相邻元素变换为序列B,需要的最小次数为A中…
又是一道树状数组求逆序对的题目. 这一题我们可以将第二个串中的每一个字母,与第一个串中的字母做两两匹配,令第二个串第i个字母的值id[i]为该字母与第一个串中的字母匹配到的位置. 然后考虑到所求答案为最小的移动次数,那么这个最小的移动次数显然为序列id的逆序对个数. 树状数组求一求就没了. 我一看时间只剩15min了本来想看下能否打完的,没想到3min打完了.... #include<bits/stdc++.h> #define M 2000005 #define L long long #d…
POI2012题解 这次的完整的\(17\)道题哟. [BZOJ2788][Poi2012]Festival 很显然可以差分约束建图.这里问的是变量最多有多少种不同的取值. 我们知道,在同一个强连通分量中的变量的相对大小是限制死了的,即这个强连通分量中的最大值减去最小值不为\(\inf\),而这个区间中的所有数一定都可以被取到(因为这里的边权只有\(0,\pm1\)嘛),所以一个强连通分量对答案的贡献是这个强连通分量中的最长路\(+1\).对于不在同一个强连通分量中的变量,其相对大小不受限制,取…