洛谷 P1966 火柴排队 —— 思路
题目:https://www.luogu.org/problemnew/show/P1966
首先,一个排列相邻交换变成另一个排列的交换次数就是逆序对数;
随便画一画,感觉应该是排个序,大的对应大的,小的对应小的差值最小,具体证明的话应该是分类讨论一下吧;
操作两个序列可以转化成操作一个序列,大小对应就行了;
差点被 rk[] , ps[] 什么的弄晕,还是因为懒不想写离散化...
总之1A还是蛮高兴的。
代码如下:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long ll; int const maxn=1e5+5,mod=99999997; int n,psb[maxn],rkb[maxn],f[maxn],rka[maxn]; ll ans,a[maxn],b[maxn]; ll rd() {ll ret=0,f=1; char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1; ch=getchar();}while(ch>='0'&&ch<='9')ret=ret*10+ch-'0',ch=getchar();return ret*f; } bool cmp1(int x,int y){return a[x]>a[y];} bool cmp2(int x,int y){return b[x]>b[y];} void add(int x){for(;x;x-=(x&-x))f[x]++;} int query(int x){int ret=0; for(;x<=n;x+=(x&-x))ret+=f[x]; return ret;} int main() {n=rd();for(int i=1;i<=n;i++)a[i]=rd(),rka[i]=i;for(int i=1;i<=n;i++)b[i]=rd(),rkb[i]=i;sort(rka+1,rka+n+1,cmp1); sort(rkb+1,rkb+n+1,cmp2);// for(int i=1;i<=n;i++)printf("rka[%d]=%d rkb[%d]=%d\n",i,rka[i],i,rkb[i]);for(int i=1;i<=n;i++)psb[rkb[i]]=i;for(int i=1;i<=n;i++){int ps=rka[psb[i]];ans=(ans+query(ps))%mod;add(ps);}printf("%lld\n",ans);return 0; }
转载于:https://www.cnblogs.com/Zinn/p/9647052.html
洛谷 P1966 火柴排队 —— 思路相关推荐
- 洛谷P1966 火柴排队
题目描述 涵涵有两盒火柴,每盒装有 nn 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为:\sum (a_i-b_i)^2∑(a ...
- 洛谷P1966 火柴排队(cdq分治 + 逆序对)
2020.6.8 练二分了当然要练练分治,这些基础的处理手段真的还是蛮好用的. 这道题是问ai 和bi的平方和最小,最少需要的相邻的交换次数.手动模拟了一下感觉没什么思路.但是后来注意到每次只能移动相 ...
- 洛谷 P1966 火柴排队【树状数组】
题目描述 涵涵有两盒火柴,每盒装有n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为 ∑ni=1(ai−bi)2 ∑ i = 1 ...
- 洛谷 P1966 火柴排队
题意 给定2个等长序列a.b,要求通过交换使 \[\sum_{i=1}^{n}(a_i-b_i)^2\] 最小. 分析 看着这个式子,我突然想到了方差.很明显,方差反应数据的波动程度,所以让数据集中就 ...
- 洛谷P1966 火柴排队(逆序对)
题意 题目链接 Sol 不算很难的一道题 首先要保证权值最小,不难想到一种贪心策略,即把两个序列中rank相同的数放到同一个位置 证明也比较trivial.假设\(A\)中有两个元素\(a, b\), ...
- NOIP2013 火柴排队 [洛谷P1966]
NOIP2013 火柴排队 [洛谷P1966] 题目描述 涵涵有两盒火柴,每盒装有 \(n\) 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之 ...
- P1966 火柴排队题解
P1966 火柴排队 题意:有两列火柴,各有各的高度,两两高度不同,每次只能交换相邻的数,问最少交换多少次,使得 ∑ ( a i − b i ) 2 \sum (a_i-b_i)^2 ∑(ai−bi ...
- 洛谷 P1149 火柴棒等式(太suang络吧)
题目描述 给你n根火柴棍,你可以拼出多少个形如"A+B=CA+B=C"的等式?等式中的AA.BB.CC是用火柴棍拼出的整数(若该数非零,则最高位不能是00).用火柴棍拼数字0-90 ...
- 洛谷日常刷题(洛谷官方题单 思路+详解)
目录 前言 非官方题单的题 P1141 01迷宫 1-4 递推与递归 P1255 数楼梯 1002 [ NOIP 2002 普及组]过河卒 P1044 [NOIP2003 普及组] 栈 P1028 [ ...
最新文章
- C语言函数集(十八)
- ubuntu 下安装nginx
- 疯狂ios讲义之疯狂连连看游戏简介
- 0基础如何入门Python编程
- python整数类型提供了4种进制表示_关于整数类型的 4 种进制表示,哪个选项的描述是正确的?_学小易找答案...
- oracle pl/sql 包
- 请问android直接post请求登录地址成功后,webview还是现实登录界面
- reg51.h和reg52.h头文件
- 我发现了一个价值8500美元的 HackerOne 平台漏洞
- 10 个 Python 初学者必知编码小技巧
- Android Service 的重启
- 手把手图文并茂教你用Android Studio编译FFmpeg库并移植
- APP测试—专项测试概念
- 如何解决注塑成型中的毛边问题?
- JZOJ 3337. 【NOI2013模拟】wyl8899的TLE
- php if相关标签,dedecms模板中运用dede标签时使用php和if判断语句的方法
- mysql 的几种缓存,数据库缓存几种方式 -解道Jdon
- 【burpsuite安全练兵场-服务端8】文件上传漏洞-7个实验(全)
- 天津铸源宝利缘系统成立仪式在津召开
- 比KEEP更好,运动健身、塑形瘦身的小程序新选择
热门文章
- IT兄弟连 JavaWeb教程 使用Servlet实现在页面中显示随机数
- python+ seleniumAPPium自动化 page Object 设计模式
- 模块使用:time、datetime、calendar、sys、os、os.path、normcase和normapath、random、json、pickle...
- Node.js与io.js那些事儿
- 转:SQL的内连接与外连接
- Week2 Teamework from Z.XML 软件分析与用户需求调查(三)必应助手体验评测
- iOS学习之NSBundle介绍和使用
- 方法文件Matlab调用动态链接库
- apache配置文件httpd.conf部分参数说明
- RAID及LVM,iscsi