51nod 1574 排列转换(贪心+鸽巢原理)
来源:互联网 发布:12本程序员必读的书籍 编辑:程序博客网 时间:2024/05/18 20:47
题意:有两个长度为n的排列p和s。要求通过交换使得p变成s。交换 pi 和 pj 的代价是|i-j|。要求使用最少的代价让p变成s。
考虑两个数字pi和pj,假如交换他们能使得pi到目标的距离减少,pj到目标的距离减少。那么应该交换他们,这是一个必要的操作,也是答案的下界。
如果每一次都能找到这样的两个数字,那么答案就是排列p中的每个数字在排列s的位置的距离差之和/2.这显然是答案的下界。
现在考虑证明这个下界是可以构造出来的。
考虑排列p中最后一个位置不对的数字,不妨设为pj,他的目标位置是pi,那么如果p[i+1,j]中有任意一个数的目标是pk(k
#include<bits/stdc++.h>using namespace std;const int maxn = 2e5+5;typedef long long ll;int pos[maxn];int main(){ int n; while(~scanf("%d",&n)) { int x; for(int i = 1;i <= n;++i) { scanf("%d",&x); pos[x] = i; } ll ans = 0; for(int i = 1;i <= n;++i) { scanf("%d",&x); ans += abs(pos[x] - i); } printf("%lld\n",ans/2); } return 0;}
阅读全文
0 0
- 51nod 1574 排列转换(贪心+鸽巢原理)
- 51nod 1574 排列转换(贪心)
- 51 nod 1574 排列转换(思维 贪心)
- 51nod 1574 排列转换(抽屉原理)
- 51Nod-1574-排列转换
- 51nod 1574 排列转换
- 51nod 1574: 排列转换
- 51nod-1574-排列转换
- ★★51nod 1574 排列转换 (贪心思维题)
- 51nod 1103【鸽巢原理】
- 51nod 全排列
- 51 nod 砝码称重(贪心+进制转换思想)
- 51Nod 算法马拉松17 最好的排列 贪心求解加高精度
- 51nod--贪心入门
- 51NOD 1432 贪心
- 51nod 1133【贪心】
- 51nod 1428【贪心】
- 51nod 1278【贪心】
- Qt 自定义Qlistwidget滚动条样式
- OpenStack之Horizon源码架构浅析(一)
- ubuntu中如何提高源的下载速度
- 菜单隐藏和显示
- kill与kill -9的区别
- 51nod 1574 排列转换(贪心+鸽巢原理)
- 华为交换机接口索引与物理端口对应
- qwt库
- 【Python自学】05. list和 tuple
- springboot服务器端允许跨域
- 字符串反转算法
- tf.reduce_sum理解(小记)
- 洛谷 2014 选课 树形DP 解题报告
- Shell重定向和管道操作