洛谷P1966 【火柴排队】
题解 P1966 【火柴排队】
说明:
在数学中有个公式:
(a1-b1)^2+(a2-b2)^2<(a2-b1)^2+(a1-b2)^2
(你可以自己试着证一下)
两列火柴对应的两根火柴在各列中高度的排序应该相同
再申请一个r数组,使得r[a[i].num]=b[i].num
然后,显而易见,本题得解。
温馨提示:代码有防抄袭系统,小心抄袭掉坑里。
#include <cstdio>
#include <algorithm>反抄袭系统
using namespace std;
struct huochai
{
int h;
int num;
}a[100001],b[100001];
int n;
int read()
{
char ch=getchar();
while(ch<'0' || ch>'9')
{
ch=getchar();
}
int h=0;
while(ch<='9' && ch>='0')
{
h=h*10+ch-48;
ch=getchar();
}
return h;
}
int my(const huochai&a,const huochai&b)
{
if(a.h<b.h)
{
return 1;
}
else
{
return 0;
}
}
int c[100001],r[100001],tot=0;
void merge_sort(int left,int right)
{
if(left==right)反抄袭系统
{
return;
}
int mid=(right+left)/2,x=left,y=mid+1,t=left;
merge_sort(left,mid);
merge_sort(mid+1,right);
while(x<=mid&&y<=right)
{
if(r[x]>r[y])
{
tot=tot+mid-x+1;
tot=tot%99999997;
c[t++]=r[y++];
}
else
c[t++]=r[x++];
}
while(x<=mid)
{
c[t++]=r[x++];
}
while(y<=right)
{
c[t++]=r[y++];
}
for(int w=left;w<=right;w++)
{
r[w]=c[w];
}
}
int main()
{
n=read();反抄袭系统
for(int i=1;i<=n;i++)
{
a[i].h=read();
}
for(int i=1;i<=n;i++)
{
a[i].num=i;
}
for(int i=1;i<=n;i++)
{
b[i].h=read();
}
for(int i=1;i<=n;i++)
{
b[i].num=i;
}
sort(a+1,a+n+1,my);
sort(b+1,b+n+1,my);
for(int i=1;i<=n;i++)
{
r[a[i].num]=b[i].num;
}
merge_sort(1,n); 反抄袭系统
printf("%d",tot);
return 0;
}
洛谷P1966 【火柴排队】的更多相关文章
- [NOIP2013提高&洛谷P1966]火柴排队 题解(树状数组求逆序对)
[NOIP2013提高&洛谷P1966]火柴排队 Description 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相 ...
- 【刷题】洛谷 P1966 火柴排队
题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为: ∑(ai-bi)^2 其中 ai 表示 ...
- 洛谷 P1966 火柴排队 解题报告
P1966 火柴排队 题目描述 涵涵有两盒火柴,每盒装有 \(n\) 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为: \(\s ...
- 洛谷——P1966 火柴排队&&P1774 最接近神的人_NOI导刊2010提高(02)
P1966 火柴排队 这题贪心显然,即将两序列中第k大的数的位置保持一致,证明略: 树状数组求逆序对啦 浅谈树状数组求逆序对及离散化的几种方式及应用 方法:从前向后每次将数插入到bit(树状数组)中, ...
- [洛谷P1966] 火柴排队
题目链接: 火柴排队 题目分析: 感觉比较顺理成章地就能推出来?似乎是个一眼题 交换的话多半会往逆序对上面想,然后题目给那个式子就是拿来吓人的根本没有卵用 唯一的用处大概是告诉你考虑贪心一波,很显然有 ...
- 洛谷 P1966 火柴排队
题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为:∑(ai−bi)2 其中ai 表示 ...
- 洛谷 P1966 火柴排队 —— 思路
题目:https://www.luogu.org/problemnew/show/P1966 首先,一个排列相邻交换变成另一个排列的交换次数就是逆序对数: 随便画一画,感觉应该是排个序,大的对应大的, ...
- 洛谷——P1966 火柴排队
https://www.luogu.org/problem/show?pid=1966 题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列 ...
- 洛谷p1966 火柴排队 (逆序对变形,目标排序
题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为: ∑(ai-bi)^2 其中 ai 表示 ...
- 洛谷P1966 火柴排队 贪心+离散化+逆序对(待补充QAQ
正解: 贪心+离散化+逆序对 解题报告: 链接在这儿呢quq 这题其实主要难在想方法吧我觉得?学长提点了下说用贪心之后就大概明白了,感觉没有很难 但是离散化这里还是挺有趣的,因为并不是能很熟练地掌握离 ...
随机推荐
- Docker中安装elasticsearch6.7.1
先拉取镜像 docker pull docker.elastic.co/elasticsearch/elasticsearch:6.7.1 然后创建容器 (这是一条长的命令!!!) dock ...
- Linux必备150个命令
命令 功能说明 线上查询及帮助命令(2个) man 查看命令帮助,命令的词典,更复杂 ...
- qtp type和set方法的区别
type模拟键盘输入,是一个字符一个字符的输入. set是整个输入框一起置值. 例如:winedit中输入a后,再用type输入b,结果就是ab 如果用set输入a后,再用set输入b,结果就是b. ...
- pip更新
python -m ** install -U **
- 关于javascript中arguments的一个很好的例子
金克斯的迫击炮! 实现一个摧毁(destroyer)函数,第一个参数是待摧毁的数组,其余的参数是待摧毁的值 函数中的有隐式的不确定个数的参数,而我们在函数中将会用到它,很显然,这需要我们在 argum ...
- nodejs操作 mongoose(mongodb)和Sequelize(mysql)查询数据后添加新属性未生效
最近在着手koa时候,发现mongoose(mongodb)查询数据库后添加新属性,前端拿不到新属性问题, 然后测试了一下Sequelize(mysql),发现也有同样的问题存在.此时着手干! 1.1 ...
- CTF资料
题目大概有这么几个 web,密码学,pwn(综合渗透),misc(杂项),reverse(逆向),ppc(编程类) 入门: http://bobao.360.cn/ctf/ 360的CTF训练营ww ...
- redis应用--位图
在我们平时开发过程中,会有一些 bool 型数据需要存取,比如用户一年的签到记录,签了是 1,没签是 0,要记录 365 天.如果使用普通的 key/value,每个用户要记录 365 个,当用户上亿 ...
- 用tensorflow实现最简单的神经网络
import tensorflow as tfimport numpy as np def add_layer(inputs,in_size,out_size,activation_function= ...
- centos 远程授权
centos 远程授权命令 ssh-copy-id root@192.168.15.70