当前位置:网站首页>洛谷P1966 火柴排队
洛谷P1966 火柴排队
2022-08-02 17:57:00 【CLH_W】
题目描述
涵涵有两盒火柴,每盒装有 nn 根火柴,每根火柴都有一个高度。 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为:\sum (a_i-b_i)^2∑(ai−bi)2
其中 a_iai 表示第一列火柴中第 ii 个火柴的高度,b_ibi 表示第二列火柴中第 ii 个火柴的高度。
每列火柴中相邻两根火柴的位置都可以交换,请你通过交换使得两列火柴之间的距离最小。请问得到这个最小的距离,最少需要交换多少次?如果这个数字太大,请输出这个最小交换次数对 10^8-3108−3 取模的结果。
输入格式
共三行,第一行包含一个整数 nn,表示每盒中火柴的数目。
第二行有 nn 个整数,每两个整数之间用一个空格隔开,表示第一列火柴的高度。
第三行有 nn 个整数,每两个整数之间用一个空格隔开,表示第二列火柴的高度。
输出格式
一个整数,表示最少交换次数对 10^8-3108−3 取模的结果。
输入输出样例
输入 #1复制
4 2 3 1 4 3 2 1 4
输出 #1复制
1
输入 #2复制
4 1 3 4 2 1 7 2 4
输出 #2复制
2
说明/提示
【输入输出样例说明一】
最小距离是00,最少需要交换 11 次,比如:交换第 11列的前22 根火柴或者交换第 22 列的前 22根火柴。
【输入输出样例说明二】
最小距离是 1010,最少需要交换 22 次,比如:交换第 11 列的中间 22 根火柴的位置,再交换第 22 列中后 22 根火柴的位置。
【数据范围】
对于 10\%10% 的数据, 1 \leq n \leq 101≤n≤10;
对于 30\%30% 的数据,1 \leq n \leq 1001≤n≤100;
对于 60\%60% 的数据,1 \leq n \leq 10^31≤n≤103;
对于 100\%100% 的数据,1 \leq n \leq 10^51≤n≤105,0 \leq0≤ 火柴高度 < 2^{31}<231。
上代码:
#include<bits/stdc++.h>
using namespace std;
#define re register
#define ll long long
#define il inline
#define dou double
#define un unsigned
il ll read()
{
char c=getchar();int x=0,f=1;
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
return x*f;
}
#define N 100000+10
#define M 99999997
int n,ans;
struct number
{
ll val,num;
};
number a[N],b[N];
ll bit[N],x[N];
il bool cmp(number x,number y)
{
if(x.val==y.val)
return x.num<y.num;
return x.val<y.val;
}
il ll lowbit(int x)
{
return x&(-x);
}
il void change(int x,int d)
{
for(re int i=x;i<=n;i+=lowbit(i))
{
bit[i]+=d;
bit[i]%=M;
}
}
il ll query(int x)
{
if(x==0)
return 0;
ll ret=0;
for(re int i=x;i>=1;i-=lowbit(i))
{
ret+=bit[i];
ret%=M;
}
return ret;
}
int main()
{
n=read();
for(re int i=1;i<=n;i++)
{
a[i].val=read();
a[i].num=i;
}
for(re int i=1;i<=n;i++)
{
b[i].val=read();
b[i].num=i;
}
sort(a+1,a+n+1,cmp);
sort(b+1,b+n+1,cmp);
for(re int i=1;i<=n;i++)
x[a[i].num]=b[i].num;
for(re int i=1;i<=n;i++)
{
change(x[i],1);
ans+=i-query(x[i]);
ans%=M;
}
cout<<ans<<endl;
return 0;
}
边栏推荐
- Smart Microelectronics Releases Low-Power MM32L0130 Series MCU Products
- Enterprise cloud cost control, are you really doing it right?
- NIO基础之三大组件
- How Tencent architects explained: The principle of Redis high-performance communication (essential version)
- 载20(S)-人参皂苷/细胞穿膜肽-单克隆抗体-载丝裂霉素白蛋白纳米微球的制备
- 来亲自手搭一个ResNet18网络
- Simulink脚本自动创建Autosar Parameter Port及Mapping
- Go编译原理系列6(类型检查)
- 织梦自定义表单添加全选和全不选功能按钮
- 红队实战靶场ATT&CK(一)
猜你喜欢
在线文档Sheet技术解析
redis summary_distributed cache
手机银行体验性测试:如何获取用户真实感受
Endanger the safety of common Internet attacks have?
织梦自定义表单添加全选和全不选功能按钮
监控易火星版即将亮相:分布式运维帮助TOP3000大企业跨越管理鸿沟
天翼云4.0分布式云赋能千行百业数字化转型
NeRF: The Secret of 3D Reconstruction Technology in the Popular Scientific Research Circle
How a "cloud" can bring about new changes in the industry
阿波罗 planning代码-modules\planning\lattice\trajectory_generation\PiecewiseBrakingTrajectoryGenerator类详解
随机推荐
IReport常见问题及处理方法
千万级别的表分页查询非常慢,怎么办?
我用这一招让团队的开发效率提升了 100%!
LeetCode 2343. 裁剪数字后查询第 K 小的数字
基于HDF的LED驱动程序开发(1)
golang源码分析(33)pollFD
golang刷leetcode 字符串(4)逆波兰式
今年上半年,我国公路建设总体形势持续向好
C#里如何简单的校验时间格式
golang刷leetcode动态规划(10)编辑距离
宝塔搭建实测-基于ThinkPHP5.1的wms进销存源码
HDF驱动框架的API(1)
故障分析 | 一条 SELECT 语句跑崩了 MySQL ,怎么回事?
如何确保智能工厂的安全?
KunlunBase 1.0 发布了!
我的递归从不爆栈
Interviewer: can you talk about optimistic locking and pessimistic locks
手机银行体验性测试:如何获取用户真实感受
记一次 .NET 某工控自动化控制系统 卡死分析
mysql四种隔离级别