首页 > TAG信息列表 > P1966
P1966 [NOIP2013 提高组] 火柴排队做题笔记
这题和 P5677 一样,是从树状数组题单里翻出来的,由于开始看时感觉题解代码写的不是很清晰,就先放进了做题计划里,后来几次看这道题,但由于第一次看题可能留下了一些心理阴影以及时间不多,一直没切掉。直到先去做了用树状数组求逆序对,才感觉这道题变得简单了不少。思路:用一个数组储存输入P1966 [NOIP2013 提高组] 火柴排队
有两盒火柴,每盒装有 \(n\) 根火柴,每根火柴都有一个高度。 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同。其中 \(a_i\) 表示第一列火柴中第 \(i\) 个火柴的高度,\(b_i\) 表示第二列火柴中第 \(i\) 个火柴的高度。 每列火柴中相邻两根火柴的位置都可以交换,通过交换使洛谷P1966 [NOIP2013 提高组] 火柴排队
主要思路:离散化+归并求逆序对 点击查看代码 #include<bits/stdc++.h> using namespace std; const int N=1e5+10,M=1e8-3; int p[N],tmp[N],cnt=0; struct FF{ int h,fi; }fs1[N],fs2[N]; bool cmp(FF x,FF y){ return x.h<y.h; } void merge_sort(int l,int r){ if(l>=P1966 火柴排队
P1966 火柴排队 树状数组的简单练习题目 题目要求最小化 \(\sum(a_i-b_i)^2\) 可以转化成 a数组中第K大的数要和b数组中第K大的数在同一个位置,所以先做一手离散化 然后令\(pos[brr[i]] = i\) pos数组中存储的是 b数组值所对应的位置 \(new[i] = pos[arr[i]]\) new数组中存储的是 a洛谷P1966 [NOIP2013 提高组] 火柴排队
题链 若要将一个排列转换成另一个排列,一次只能交换相邻两个元素,例如将 a = {4, 3, 1, 2} 变成 b = {1, 3, 2, 4},最少需要交换 a或b 几步; 新建 pa[a[i]] = i 记录排名a[i]的位置,pb[b[i]] = i 记录排名b[i]的位置,令p[pa[i]] = pb[i](相当于映射)得到的p序列求逆序数则为答案; #include逆序对--P1966 火柴排队
*题意:两个数组$a$和$b$,使$\sum_{i=1}^n {(a_i-b_i)}^2$ 最小 *思路:对于上述的完全平方公式,展开后变成$\sum_{i=1}^n {a_i}^2+{b_i}^2-2a_ib_i$,其中前两项为定值,我们继续变化$\sum_{i=1}^n {a_i}^2+{b_i}^2$-2$\sum_{i=1}^n a_ib_i$ 只要令$\sum_{i=1}^n a_ib_i$越大越好,由此我们树状数组 P1966 火柴排队【逆序对】
题目 https://www.luogu.com.cn/problem/P1966 题目分析 1.求两列之间的距离最小值:其实就是要求a 序列第 k 大的元素必须和序列 b 中第k大的元素的位置必须一样(通俗的讲就是aj与bj大的对应大的,小的对应小的,这样相减的平方和才最小)2.火柴高度范围是2的31次方,如果直接进行运算数组会P1966 火柴排队
//P1966 火柴排队#include<bits/stdc++.h>using namespace std;typedef long long ll;const int mod=99999997;const int mxn=1e6+5;int n;int /*a1[mxn],a2[mxn],d1[mxn],d2[mxn],*/c[mxn],r[mxn];struct ss{ int v,num;}a[mxn],b[mxn];bool cmp(ss a,ss b){ return[NOIp2013] luogu P1966 火柴排队
磕了瓶魔爪。 题目描述 你有两个长度为 NNN 的数组 a,ba,ba,b,试重新排列 aaa 数组使得S=∑i=1n(ai−bi)2S=\sum_{i=1}^{n}{(a_i-b_i)^2}S=i=1∑n(ai−bi)2的值最小。你可且仅可以交换相邻的两个数。求最小交换数对 99,999,99799,999,99799,999,997 取模的值。 SolutiP1966 火柴排队
传送门 显然有一个想法,把 $A,B$ 从小到大一一对应,这样距离最小,证明的话好像挺显然的 设 $A_i<A_{i+1}$ ,$B_{i}<B_{i+1}$,那么如果 $A_i$ 对应 $B_i$,$A_{i+1}$ 对应 $B_{i+1}$ 距离为 $(A_i-B_i)^2+(A_{i+1}-B_{i+1})^2=A_{i}^{2}-2A_iB_i+B_{i}^2+A_{i+1}^{2}-2A_{i+1}B_{i+1}+B_{P1966 NOIP2013T2 火柴排队 求逆序对
题意:题目给出两个等长的序列,求交换两个序列的最小次数,使两个序列之间的值满足 sum(ai-bi)^2 最小; 解法:归并排序/树状数组+求逆序对 1.归并排序/树状数组:这两种方式都是可以较快地求出逆序对个数 2.求逆序对:因为只有当两个序列相对的数值都是其本序列中的相同等级的数,才能使等式