当前位置:网站首页>洛谷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;
}边栏推荐
- 载20(S)-人参皂苷/细胞穿膜肽-单克隆抗体-载丝裂霉素白蛋白纳米微球的制备
- 有关代购系统搭建的那点事
- E-Surfing Cloud 4.0 Distributed Cloud Enables Digital Transformation of Thousands of Industries
- 衡量软件产品质量的 14 个指标
- golang刷leetcode 经典(2)拓扑排序
- redis summary_distributed cache
- 电子行业库存管理痛点与WMS仓储管理系统解决方案
- 今年上半年,我国公路建设总体形势持续向好
- redis总结_基础
- How to ensure the security of smart factories?
猜你喜欢

Smart Microelectronics Releases Low-Power MM32L0130 Series MCU Products

pydev debugger: warning: trying to add breakpoint to file that does not exist: /tmp/xxx

【秒杀办法】根据二叉树的先序遍历、中序遍历、后序遍历快速创建二叉树
面试官:可以谈谈乐观锁和悲观锁吗

方法的使用

成功部署工业物联网的五个关键

How to ensure the security of smart factories?

mysql四种隔离级别

红队实战靶场ATT&CK(一)

手机银行体验性测试:如何获取用户真实感受
随机推荐
LeetCode 2336. 无限集中的最小数字(SortedSet)
千万级QPS下服务如何才能平滑启动
Interviewer: can you talk about optimistic locking and pessimistic locks
究极异常处理逻辑——多层次异常的处理顺序
AtomicInteger详解
宝塔搭建实测-基于ThinkPHP5.1的wms进销存源码
MySQL基本操作和基于MySQL基本操作的综合实例项目
Ubuntu系统下用docker安装oracle
NIO之Selector执行流程
方法的使用
技术人生 | 如何画业务大图
开源一夏 | Web开发(七):登录实现及功能测试
Gear 月度更新|6 月
浅谈混迹力扣和codeforces上的几个月
TSF微服务治理实战系列(一)——治理蓝图
如何确保智能工厂的安全?
How a "cloud" can bring about new changes in the industry
无法超越的100米_百兆以太网传输距离_网线有哪几种?
golang 源码分析(39)hystrix-go
分布式 | dble 启动的时候做了什么之配置检测