当前位置: 首页 > news >正文

火柴排队.

 题意:给两列火柴,可以交换任意相邻的火柴,使得(ai-bi)^2的和最小,求最小交换次数。

分析:使得(ai-bi)^2的和最小,即a^2-2ab+b^2的和最小,那么使得2ab最大,就可以使得整体最小。我们可以假设当序列有序时候,2ab最大。

假如a>b,c>d  ,那么ac+bd>ad+bc;

反证法:令ac+bd<ad+bc,那么c(a-b)<d(a-b),得出c<d,与事实不符,所以结论错误,即ac+bd>ad+bc,当序列有序时候,2ab最大。

此时问题就可以变为当序列有序时候,最小的交换次数怎么求

显然,把两个序列都从小到大,或者从大到小排列,显然交换次数不是最小的。

那么,可以求  a相对于b,把a排成和b大小关系一一对应的序列,即a序列的第一小和b序列的第一小在同一位置上,这样的交换次数是最少的。只需要 a队伍中第 i个数和 b队伍中第 i个数一一对应,那么就算两个队伍不是有序的也不影响结果。

所以我们可以存一下a,b序列的下标和数值,进行一下按值排序,就可以得到a,b的相对位置,此时可以增加一个数组c,c的下标存a数组的下标,c数组的值存b数组的下标,因为c数组下标是有序的,那么我们只要想到怎么使c数组的数值排序,使得数值也变成有序的就可以得到答案。

此时数值变成有序后,就表示a数组和b数组的大小关系变成了一一对应。

怎样变换可以想到树状数组或者逆序对。

#include<bits/stdc++.h>using namespace std;const int N = 1e5 + 10 , mod=99999997;
int n;
struct node
{int v,p;bool operator < (const node &w) const{return v<w.v;} 
}a[N],b[N];int tr[N];
int c[N];int lowbit(int x) 
{return x&(-x);
}
int query(int x)
{int res=0;for(int i=x;i>=1;i-=lowbit(i)) res+=tr[i];return res; 
}
void modify(int x,int c)
{for(int i=x;i<=n;i+=lowbit(i)) tr[i]+=1;
}int main()
{cin>>n;for(int i=1;i<=n;i++) cin>>a[i].v,a[i].p=i;for(int i=1;i<=n;i++) cin>>b[i].v,b[i].p=i;sort(a+1,a+n+1);sort(b+1,b+n+1);for(int i=1;i<=n;i++)  c[a[i].p]=b[i].p;int res=0;for(int i=n;i>=1;i--){res = (res+query(c[i]))%mod;modify(c[i],1);}cout<<res<<endl;return 0;
}

http://www.lryc.cn/news/209140.html

相关文章:

  • 改善游戏体验:数据分析与可视化的威力
  • GEE:本地影像上传到GEE的Assets中,并输入机器学习算法中作为特征变量
  • 【Mybatis源码】XMLConfigBuilder构建器 - 读取XML配置初始化Configuration对象
  • Python算法练习 10.28
  • 【java学习—八】单例设计模式(5)
  • 【设计模式】第4节:创建型模式之“单例模式”
  • NodeJS爬取墨刀上的设计图片
  • linux--
  • conda虚拟环境笔记收录
  • RGB-T Salient Object Detection via Fusing Multi-Level CNN Features
  • 安卓开发实例:方向传感器
  • [论文笔记]GTE
  • Prometheus字段解析
  • msigdbr hallmarks gsea broad研究所
  • 理解V3中的proxy和reflect
  • 实现寄生组合继承
  • ARM 账号注册报错 The claims exchange ‘Salesforce-UserWriteUsingEmail‘
  • 笔记:电子设备接地,接的到底是什么地?
  • PY32F002A系列单片机:高性价比、低功耗,满足多样化应用需求
  • 头歌的数据库的第三次作业的答案
  • 前端3D规划
  • appium操控微信小程序的坑
  • 6 个最佳 Windows 免费磁盘分区管理器
  • 【Leetcode】【每日一题】【简单】2558. 从数量最多的堆取走礼物
  • LeetCode 每日一题 2023/10/23-2023/10/29
  • Android:Installed Build Tools revision 33.0.2 is corrupted.
  • 语法复习之C语言与指针
  • vue笔记(二)
  • 【IT行业就业前景广阔:探讨热门方向与就业机会】
  • linux上java -jar方式运行项目及输出文件nohup.out的清理, linux上定时器的用法