涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度。现在将每盒中的火柴各自排成一列,同一列火柴的高度互不相同,两列火柴之间的距离定义为:

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

intput:

4
2 3 1 4
3 2 1 4

output:

1

思路:

先开一个结构体,然后输入。按照v的大小升序排序。

  1. const int maxn=;
  2. struct cyc
  3. {
  4. int V,id;
  5. }a[maxn],b[maxn];

然后,将a中元素对应b的的位置储存到c。

最后,归并排序即可。

  1. #include<iostream>
  2. #include<string>
  3. #include<algorithm>
  4. #include<cstring>
  5. #include<cstdio>
  6. #include<cmath>
  7. #include<iomanip>
  8. #include<queue>
  9. using namespace std;
  10. const int maxn=,lln=;
  11. struct cyc
  12. {
  13. int v,id;
  14. }a[maxn],b[maxn];
  15. int n;
  16. int c[maxn],d[maxn];
  17. int ans=;
  18. bool myc(cyc x,cyc y)
  19. {
  20. return x.v<y.v;
  21. }
  22. void work(int l,int r)
  23. {
  24. int mid,tmp,i,j;
  25. if(l+<r)
  26. {
  27. mid=(l+r)/;
  28. work(l,mid-);
  29. work(mid,r);
  30. tmp=l;
  31. for(i=l,j=mid;i<=mid-&&j<=r;)
  32. {
  33. if(c[i]>c[j])
  34. {
  35. d[tmp++]=c[j++];
  36. ans=1LL*(ans+mid-i)%lln;
  37. }
  38. else
  39. {
  40. d[tmp++]=c[i++];
  41. }
  42. }
  43. if(j<=r)
  44. {
  45. for(;j<=r;j++) d[tmp++]=c[j];
  46. }
  47. else
  48. {
  49. for(;i<=mid-;i++) d[tmp++]=c[i];
  50. }
  51. for(i=l;i<=r;i++)
  52. c[i]=d[i];
  53. }
  54. else{
  55. if(l+==r)
  56. {
  57. if(c[l]>c[r])
  58. {
  59. swap(c[l],c[r]);
  60. ans=1LL*(ans+)%lln;
  61. }
  62. }
  63. }
  64. }
  65. int main()
  66. {
  67. /*freopen("2.in","r",stdin);
  68. freopen("2.out","w",stdout);*/
  69. //ios::sync_with_stdio(false);
  70. cin>>n;
  71. for(int i=;i<=n;i++)
  72. {
  73. cin>>a[i].v;
  74. a[i].id=i;
  75. }
  76. for(int i=;i<=n;i++)
  77. {
  78. cin>>b[i].v;
  79. b[i].id=i;
  80. }
  81. sort(a+,a++n,myc);
  82. sort(b+,b++n,myc);
  83. for(int i=;i<=n;i++)
  84. c[b[i].id]=a[i].id;
  85. work(,n);
  86. cout<<ans<<endl;
  87. return ;
  88. }

noip2013 火柴排序的更多相关文章

  1. LOJ2609. NOIP2013 火柴排队 【树状数组】

    LOJ2609. NOIP2013 火柴排队 LINK 题目大意: 给你两个数列,定义权值∑i=1(ai−bi)^2 问最少的操作次数,最小化权值 首先需要发现几个性质 最小权值满足任意i,j不存在a ...

  2. NOIP2013火柴排队[逆序对]

    题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为: ∑(ai-bi)^2 其中 ai 表示 ...

  3. [NOIP2013] 火柴排队(归并排序)

    题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为: ∑(ai-bi)^2 其中 ai 表示 ...

  4. noip2013 火柴排队

    题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为: ∑(ai-bi)^2 其中 ai 表示 ...

  5. jzoj[1438]NOIP2013火柴排队

    读题: 相邻两个火柴可以交换?两个火柴序列?嗅到了归并排序的味道. 读完题目之后,我们可以知道,如果想要交换次数最少,可以先固定一个序列不变,比如说a序列不变,变b序列 样例是 4 2 3 1 4 3 ...

  6. noip2013火柴排队_Solution

    要想对任意(ai,bi)和(aj­和b­j),当ai<aj时,都有bi<=bj:当ai>=aj时,bi>=bj,当对a进行升序排序后(b同时发生改变,从而不改变值,最后有a1& ...

  7. NOIP2013火柴排队

    Solution 恕我直言,这题是真的坑. 对于这道题,一个很显然的思路是对于A B两个序列,他们交换完后相对的两个数在原序列中的相对大小是相同的,于是我们就把序列按照A排序,在把B离散化,求逆序对, ...

  8. [树状数组+逆序对][NOIP2013]火柴排队

    火柴排队 题目描述 涵涵有两盒火柴,每盒装有n根火柴,每根火柴都有一个高度.现在将每盒中的火柴各自排成一列,同一列火柴的高度互不相同,两列火柴之间的距离定义为:∑ (ai-bi)2,i=1,2,3,. ...

  9. NOIp2013 火柴排队【逆序对/思维】 By cellur925

    题目大意:给你两列数\(ai\)和\(bi\),你可以交换每列数中相邻的两个数,求一个最小交换次数使\(\sum_{i=1}^{n}(a_i-b_i)^2\) 最小. 最后满足条件的两个序列一定是各个 ...

随机推荐

  1. Oracle PL/SQL实战代码下载

    最近在学习PL/SQL编程,算是一个进阶吧,书没带光盘,所以按照书中的地址去下载样例,无法下载,到图灵官网找到了源代码下载地址,无法下载的留邮箱,我发给大家 下载地址: http://www.itur ...

  2. 用Js+css3实现图片旋转,缩放,裁剪,滤镜

    还是前端图片的老话题,花了半天时间,东拼西凑,凑出个demo,优点在于代码少,核心代码就6行,目前刚做了旋转,缩放,裁剪,滤镜要js做,网络上也有现成的代码, 但是想做到自定义的滤镜咋办呢?这还要从底 ...

  3. (转)PowerDesigner提示Existence of index、key、reference错误

    建立一个表后,为何检测出现Existence of index的警告    A table should contain at least one column, one index, one key ...

  4. laravel开发微信公众号1 之基本配置

    需要用到的packagist:       https://github.com/overtrue/laravel-wechat  ( 目前最优雅的laravel微信sdk) 首先安装 compose ...

  5. gitgub利用客户端实现简单的上传和同步

    新建项目 打开客户端(将项目拷贝到本地) 选择要clone到的文件夹 想该文件夹中,导入自己需要上传的代码 然后,在网站上登录自己的gitgub,就可以看到刚才上传的项目了╮(╯▽╰)╭

  6. Linux运行级详解

    对于那些在DOS/Win9x/NT平台下的高级用户而言,Linux似乎是一个怪物.没有config.sys,没有 autoexec.bat,具有个人特色的机器配置不知道从何开始. 需要说明的是,很多人 ...

  7. C#日常总结1

    Rows:行的集合: Columns:列的集合: Gridview:用来显示数据的表格{ //设置 AutoGenerateColumns="false":表示不允许自动产生列,列 ...

  8. Clojure学习笔记(二)——函数式编程

    定义 “函数式编程”是一种编程范式(programming paradigm),即如何编写程序的方法论.主要思想是把运算过程尽量写成一系列嵌套的函数调用. 举例来说,现在有这样一个数学表达式: (1 ...

  9. springmvc单文件上传

    1.创建上传页面 <form action="first.do" method="post" enctype="multipart/form-d ...

  10. <转>浏览器内核分类

    浏览器的种类成千上百,但所基于的内核,却没有几个.目前主流的浏览器内核主要为以下四种: 一.Trident内核,代表产品Internet Explorer说起Trident,很多人都会感到陌生,但提起 ...