2018年6月7号(火柴排队)

  今天并没有做几题,而且多次看题解甚至有些简单的也在看题解,突然觉得自己好失败

例如这题:

题目描述

涵涵有两盒火柴,每盒装有 nn 根火柴,每根火柴都有一个高度。 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为: \sum (a_i-b_i)^2∑(ai?−bi?)2

其中 a_iai? 表示第一列火柴中第 ii 个火柴的高度, b_ibi? 表示第二列火柴中第 ii 个火柴的高度。

每列火柴中相邻两根火柴的位置都可以交换,请你通过交换使得两列火柴之间的距离最小。请问得到这个最小的距离,最少需要交换多少次?如果这个数字太大,请输出这个最小交换次数对 99,999,99799,999,997 取模的结果。

输入输出格式

输入格式:

共三行,第一行包含一个整数 nn ,表示每盒中火柴的数目。

第二行有 nn 个整数,每两个整数之间用一个空格隔开,表示第一列火柴的高度。

第三行有 nn 个整数,每两个整数之间用一个空格隔开,表示第二列火柴的高度。

输出格式:

一个整数,表示最少交换次数对 99,999,99799,999,997 取模的结果。

输入输出样例

输入样例#1: 复制

4
2 3 1 4
3 2 1 4

输出样例#1: 复制

1

输入样例#2: 复制

4
1 3 4 2
1 7 2 4

输出样例#2: 复制

2

说明

【输入输出样例说明1】

最小距离是 00 ,最少需要交换 11 次,比如:交换第 11 列的前 22 根火柴或者交换第 22 列的前 22 根火柴。

【输入输出样例说明2】

最小距离是 1010 ,最少需要交换 22 次,比如:交换第 11 列的中间 22 根火柴的位置,再交换第 22 列中后 22 根火柴的位置。

【数据范围】

对于 10\%10% 的数据, 1 ≤ n ≤ 101≤n≤10 ;

对于 30\%30% 的数据, 1 ≤ n ≤ 1001≤n≤100 ;

对于 60\%60% 的数据, 1 ≤ n ≤ 1,0001≤n≤1,000 ;

对于 100\%100% 的数据, 1 ≤ n ≤ 100,000,0 ≤1≤n≤100,000,0≤ 火柴高度 ≤ maxlongint≤maxlongint

---------------------------------------------------

我一开始连题都看不懂,没有办法只好点开题解,突然发现这就是求逆序对!!

 1 #include<bits/stdc++.h>
 2 #define MAXN 100005
 3 using namespace std;
 4 int n,cnt,b[MAXN],d[MAXN],e[MAXN],f[MAXN],u[MAXN],v[MAXN];
 5 struct node{
 6     int v,p;
 7 }a[MAXN],c[MAXN];
 8 bool cmp(node x,node y)
 9 {
10     return x.v <y.v;
11 }
12 void arfen(int l,int r)
13 {
14     if(l>=r) return ;
15     int mid=l+(r-l)/2;
16     arfen(l,mid);
17     arfen(mid+1,r);
18     for(int i=l;i<=r;i++) v[i]=u[i];
19     int i=l,j=mid+1;
20     for(int k=l;k<=r;k++)
21     {
22         if(i>mid) u[k]=v[j],j++;
23         else if(j>r) u[k]=v[i],i++;
24         else if(v[i]>v[j])
25         {
26             u[k]=v[j];
27             j++;
28             cnt+=mid-i+1;
29             cnt=cnt%99999997;
30         }
31         else
32         {
33             u[k]=v[i];
34             i++;
35         }
36     }
37 }
38 int main()
39 {
40     cin>>n;
41     for(int i=1;i<=n;i++)
42     {
43         cin>>a[i].v;
44         a[i].p=i;
45     }
46     for(int i=1;i<=n;i++)
47     {
48         cin>>c[i].v;
49         c[i].p=i;
50     }
51     sort(a+1,a+n+1,cmp);
52     for(int i=1;i<=n;i++)
53     {
54         b[a[i].p]=i;
55         e[i]=a[i].p;
56     }
57     sort(c+1,c+n+1,cmp);
58     for(int i=1;i<=n;i++)
59     {
60         d[c[i].p]=i;
61         f[i]=c[i].p;
62     }
63     for(int i=1;i<=n;i++)
64         u[i]=e[d[i]];
65     arfen(1,n);
66     cout<<cnt<<endl;
67     return 0;
68 }

推荐一个好点的博客和好方法:博客

原文地址:https://www.cnblogs.com/zssmg/p/9153242.html

时间: 2024-11-08 18:30:10

2018年6月7号(火柴排队)的相关文章

【转帖】intel 2018年1 月2号爆出漏洞分析 知乎匿名用户

作者:匿名用户链接:https://www.zhihu.com/question/265012502/answer/288407097来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 首先要明确的是:1)这个漏洞不是去年说的Intel ME的漏洞:2)这个漏洞不是很多答主说的依靠时间推测内核加载地址的问题. 这是一个新爆出的漏洞,虽然看起来不是1月2号才暴露出来.因为Linux和Windows早在去年11月份左右就有动作开始修补了. 下面是科普时间: 首先我们需要知

2018年6月4号(线段树(4))

今天想和大家一起了解下今天我刚写的一道题: P1558 色板游戏 题目背景 阿宝上学了,今天老师拿来了一块很长的涂色板. 题目描述 色板长度为L,L是一个正整数,所以我们可以均匀地将它划分成L块1厘米长的小方格.并从左到右标记为1, 2, ... L.现在色板上只有一个颜色,老师告诉阿宝在色板上只能做两件事:1. "C A B C" 指在A到 B 号方格中涂上颜色 C.2. "P A B" 指老师的提问:A到 B号方格中有几种颜色.学校的颜料盒中一共有 T 种颜料.

2018年11月17号第一次参加源创会记录

前言 昨天下午,到网易大厦参加了源创会的微信小程序技术沙龙.之前也参加过一些技术沙龙,但是原创会的还是第一次,总体感觉,还是很不错的. 细雨纷飞,准时来到会场之后,竟然发觉早已经人满为患,后边陆续还有不少参会者进场,后来的人就只能够站着听了. 主题 一共有四个主题,基本都与微信小程序和前端开发相关的.其实我也不知道为什么选题主要都和小程序或者前端相关,也许可能微信总部在广州吧,又或者广州这个城市比较着重商贸,所以微商或者搞前端这些讲求快捷实用的小公司更多吧.毕竟大部份的科技巨头都集中在北京上海深

2018年3月7号 认识html

<!doctype html>(声明为 HTML5 文档)<html>(标签限定了文档的开始点和结束点)<head>(带有最基本的必需的元素.定义文档的头部)<meta charset="utf-8">(规定 HTML 文档的字符编码:)<title>无标题文档</title>(标题)</head><body> (包含了可见的页面内容.定义文档的身子)</body></ht

2018年3月12号 学习内容

选择器: 标签选择器:根据标签名找 id选择器:根据id的属性值来找元素 #id的属性值 class选择器:根据class的属性值来找元素 .class的属性值 并列 关键符号(,)形式:选择器1(,)选择器2{} 后代  关键符号(空格)形式:父选择器(空格)子选择器 css层叠样式表 用来美化页面 css分类: 1. 内联(行内):写在标签里面 以属性的形式 属性名是style 注:不推荐但是优先级最高 2.内嵌: 写在head标签内 以标签的的形式表现 标签名是link <link rel

2018年3月13号

float:浮动 clear:both 消除浮动 要浮动的标签用div包起来 给div设宽高 设行高 设行高垂直居中: #div{ width:100%; height:30px; link-height:30px;// 行高 默认垂直居中 (这里的高要跟设的高一个样) } link-height:最好对一行使用 如果换行了 标签的高度就变了 兼容:将最外层的标签设宽高 里面用百分比 盒子模型: 从内到外,内容,内边距(填充物),边框,外边距(和别的物品的距离) html        padd

2018年3月23号 Dom操作

Dom操作 dom操作:找到元素 操作元素          找元素(标签对象)                   标签名                       document.getElementsByTagName();                   属性                       document.getElementById();    id属性值                       document.getElementsByName();  

2018年5月31号(树状数组)

今天,老师讲了树状数组,本蒟蒻有点懵懵懂懂,但是基本模板我还是记到的: 先是讲下原理: 今晚学了树状数组…所以呢我来总结一下自己对它的理解…    这图是在网上随便找找的…  由图可以得出:  c1=a1;  c2=c2+c1=a1+a2;  c3=a3;  c4=c4+c3+c2=a1+a2+a3+a4;  c5=a5;  c6=c6+c5=a5+a6;  c7=a7;  c8=c8+c7+c6+c4=a1+a2+a3+a4+a5+a6+a7+a8; 前k项和:  s1=c1=a1;  s2=

2018年6月1号(线段树(1))

今天是六一儿童节,先祝各位六一儿童节快乐 今天想和大家一起学习一下线段树: 1. 创建线段树 对于线段树我们可以选择和普通二叉树一样的链式结构.我们可以用数组来存储,下面的讨论及代码都是数组来存储线段树,节点结构如下(注意到用数组存储时,有效空间为2n-1,实 际空间确不止这么多,比如上面的线段树中叶子节点1.3虽然没有左右子树,但是的确占用了数组空间,实际空间是满二叉树的节点数目. 是树的高度,但是这个空间复杂度也是 O(n) 的 ). 定义包含n个节点的线段树 SegTreeNode seg