题意:给定两个长度为M的数组a,b,对于一个1-M的排列,不妨设为P,如果对任意0<=i<M,都有a[i] <= b[P[i]],那么称为一种合法情况,对于一种合法情况,对所有0<=i<M,在n个长度为1的线段上的区间[a[i],b[p[i]]]涂上颜色,计X=没有涂颜色的最大连续长度,求x在所有合法情况中的期望。

思路:这个题想到了就是大水题了,可惜比赛的时候题目都没看。由于全排列P的存在,使得a数组可以对应b数组的任意一种“比较方式”,于是存在合法情况等价于存在一种b数组的全排列使得a[i]<=b[i]恒成立,由于全排列的任意性,不妨将a数组,b数组分别排序,如果对任意i,a[i]<=b[i]恒成立,那么合法情况存在。然后合法情况存在的基础上,考虑重新排列一下b数组,以得到其它的合法情况。在重排列过程中注意到,无论怎么重排,只要是合法情况,最后线段的涂色情况是一样的!于是对每一种合法情况,概率一样,X一样,所以期望等于任意一种合法情况的X。由于根据所有的i,把区间[a[i], b[i]]的线段涂上颜色,没涂颜色的连续段只可能出现在[b[i]+1,a[i+1]-1](至于为什么,画个图就清楚了,相当于左右边界分别递增的线段去覆盖),用这个去更新答案。

  1. #pragma comment(linker, "/STACK:102400000,102400000")
  2.  
  3. #include <iostream>
  4. #include <cstdio>
  5. #include <algorithm>
  6. #include <cstdlib>
  7. #include <cstring>
  8. #include <map>
  9. #include <queue>
  10. #include <deque>
  11. #include <cmath>
  12. #include <ctime>
  13. #include <cctype>
  14. #include <set>
  15. #include <bitset>
  16. #include <functional>
  17. #include <numeric>
  18. #include <stdexcept>
  19. #include <utility>
  20. #include <vector>
  21.  
  22. using namespace std;
  23.  
  24. #define mem0(a) memset(a, 0, sizeof(a))
  25. #define mem_1(a) memset(a, -1, sizeof(a))
  26. #define lson l, m, rt << 1
  27. #define rson m + 1, r, rt << 1 | 1
  28. #define define_m int m = (l + r) >> 1
  29. #define rep_up0(a, b) for (int a = 0; a < (b); a++)
  30. #define rep_up1(a, b) for (int a = 1; a <= (b); a++)
  31. #define rep_down0(a, b) for (int a = b - 1; a >= 0; a--)
  32. #define rep_down1(a, b) for (int a = b; a > 0; a--)
  33. #define all(a) (a).begin(), (a).end()
  34. #define lowbit(x) ((x) & (-(x)))
  35. #define constructInt4(name, a, b, c, d) name(int a = 0, int b = 0, int c = 0, int d = 0): a(a), b(b), c(c), d(d) {}
  36. #define constructInt3(name, a, b, c) name(int a = 0, int b = 0, int c = 0): a(a), b(b), c(c) {}
  37. #define constructInt2(name, a, b) name(int a = 0, int b = 0): a(a), b(b) {}
  38. #define pchr(a) putchar(a)
  39. #define pstr(a) printf("%s", a)
  40. #define sstr(a) scanf("%s", a)
  41. #define sint(a) scanf("%d", &a)
  42. #define sint2(a, b) scanf("%d%d", &a, &b)
  43. #define sint3(a, b, c) scanf("%d%d%d", &a, &b, &c)
  44. #define pint(a) printf("%d\n", a)
  45. #define test_print1(a) cout << "var1 = " << a << endl
  46. #define test_print2(a, b) cout << "var1 = " << a << ", var2 = " << b << endl
  47. #define test_print3(a, b, c) cout << "var1 = " << a << ", var2 = " << b << ", var3 = " << c << endl
  48.  
  49. typedef long long LL;
  50. typedef pair<int, int> pii;
  51. typedef vector<int> vi;
  52.  
  53. const int dx[] = {, , -, , , , -, -};
  54. const int dy[] = {-, , , , , -, , - };
  55. const int maxn = 1e5 + ;
  56. const int md = ;
  57. const int inf = 1e9 + ;
  58. const LL inf_L = 1e18 + ;
  59. const double pi = acos(-1.0);
  60. const double eps = 1e-;
  61.  
  62. template<class T>T gcd(T a, T b){return b==?a:gcd(b,a%b);}
  63. template<class T>bool max_update(T &a,const T &b){if(b>a){a = b; return true;}return false;}
  64. template<class T>bool min_update(T &a,const T &b){if(b<a){a = b; return true;}return false;}
  65. template<class T>T condition(bool f, T a, T b){return f?a:b;}
  66. template<class T>void copy_arr(T a[], T b[], int n){rep_up0(i,n)a[i]=b[i];}
  67. int make_id(int x, int y, int n) { return x * n + y; }
  68.  
  69. int a[], b[];
  70.  
  71. int main() {
  72. //freopen("in.txt", "r", stdin);
  73. int T, n, m;
  74. cin >> T;
  75. while (T --) {
  76. cin >> n >> m;
  77. rep_up0(i, m) {
  78. sint(a[i]);
  79. }
  80. rep_up0(i, m) {
  81. sint(b[i]);
  82. }
  83. sort(a, a + m);
  84. sort(b, b + m);
  85. bool ok = true;
  86. rep_up0(i, m) {
  87. if (a[i] > b[i]) {
  88. ok = false;
  89. break;
  90. }
  91. }
  92. if (!ok) {
  93. puts("Stupid BrotherK!");
  94. continue;
  95. }
  96. int ans = a[] - ;
  97. rep_up0(i, m - ) {
  98. max_update(ans, a[i + ] - b[i] - );
  99. }
  100. max_update(ans, n - b[m - ]);
  101. printf("%d.000000\n", ans);
  102. }
  103. return ;
  104. }

[hdu5216]排序的更多相关文章

  1. javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈

    Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...

  2. iOS可视化动态绘制八种排序过程

    前面几篇博客都是关于排序的,在之前陆陆续续发布的博客中,我们先后介绍了冒泡排序.选择排序.插入排序.希尔排序.堆排序.归并排序以及快速排序.俗话说的好,做事儿要善始善终,本篇博客就算是对之前那几篇博客 ...

  3. JavaScript实现常用的排序算法

    ▓▓▓▓▓▓ 大致介绍 由于最近要考试复习,所以学习js的时间少了 -_-||,考试完还会继续的努力学习,这次用原生的JavaScript实现以前学习的常用的排序算法,有冒泡排序.快速排序.直接插入排 ...

  4. [C#][算法] 用菜鸟的思维学习算法 -- 马桶排序、冒泡排序和快速排序

    用菜鸟的思维学习算法 -- 马桶排序.冒泡排序和快速排序 [博主]反骨仔 [来源]http://www.cnblogs.com/liqingwen/p/4994261.html  目录 马桶排序(令人 ...

  5. 算法与数据结构(十三) 冒泡排序、插入排序、希尔排序、选择排序(Swift3.0版)

    本篇博客中的代码实现依然采用Swift3.0来实现.在前几篇博客连续的介绍了关于查找的相关内容, 大约包括线性数据结构的顺序查找.折半查找.插值查找.Fibonacci查找,还包括数结构的二叉排序树以 ...

  6. 算法与数据结构(七) AOV网的拓扑排序

    今天博客的内容依然与图有关,今天博客的主题是关于拓扑排序的.拓扑排序是基于AOV网的,关于AOV网的概念,我想引用下方这句话来介绍: AOV网:在现代化管理中,人们常用有向图来描述和分析一项工程的计划 ...

  7. 使用po模式读取豆瓣读书最受关注的书籍,取出标题、评分、评论、题材 按评分从小到大排序并输出到txt文件中

    #coding=utf-8from time import sleepimport unittestfrom selenium import webdriverfrom selenium.webdri ...

  8. javascript排序

    利用array中的sort()排序 w3cfunction sortNumber(a,b) { return a - b } var arr = new Array(6) arr[0] = " ...

  9. iOS自定义model排序

    在开发过程中,可能需要按照model的某种属性排序. 1.自定义model @interface Person : NSObject @property (nonatomic,copy) NSStri ...

随机推荐

  1. 腾讯云集群服务部署mysql并挂载到服务器

    一.背景 由于现在大部分的应用都是运行在云服务器上的,而现在大多数文章都是主要写如何在服务器上使用docker去运行mysql,比较少有介绍云服务器上的.再加上现在k8s比较火爆,而云厂商大多数都提供 ...

  2. Mac os Pycharm 中使用Stanza进行实体识别(自然语言处理nlp)

    stanza 是斯坦福开源Python版nlp库,对自然语言处理有好大的提升,具体好在哪里,官网里面都有介绍,这里就不翻译了.下面放上对应的官网和仓库地址. stanza 官网地址:点击我进入 sta ...

  3. 解决利用hibernate连接mysql时无法插入汉字的问题

    1.先修改mysql数据库的配置文件my.ini,此文件放在mysql安装文件的根目录下.找到default-character-set属性,并将其值更改为utf8(不是utf-8),将default ...

  4. python学习06循环

    '''while''''''while 布尔表达式:冒号不能省略''''''1+2+3+...+10'''i=1sum1=0while i<=10: sum1+=i i+=1print(sum1 ...

  5. Ubuntu 安装 Qt, 安装辅助软件

    sudo apt-get install libgl1-mesa-dev libglu1-mesa-dev sudo apt-get install gcc g++ sudo apt-get inst ...

  6. Makefile 头文件 <> 与 "" 的差别,与 Visual Studio 不同

    #include "" : 首先在所有被编译的.c所在的路径中,查找头文件,如果找不到,则到 -I路径下去找头文件 #inclue <> :首先在-I路径下去找,如果找 ...

  7. iOS逆向之一 工具的安装和使用

    iOS逆向之一-工具的安装和使用 最近在学习iOS安全方面的技术,有些东西就记录下来了,所有有了这篇文章.顺便也上传了DEMO,可以再这里找到这些DEMO的源码:dhar/iOSReProject 越 ...

  8. 关于利用注射点判断数据库web是否分离

    得到客户端主机名:select host_name();得到服务端主机名: select @@servername; 本文转hackfreer51CTO博客,原文链接:http://blog.51ct ...

  9. Linux下创建 code diff 和 合并 patch

    Linux 下经常需要给别人提供 patch 以及合 patch,这时需要用到 Linux 的 diff 和 patch 命令. 1. diff 命令 diff 命令常用来比较文件.目录,也可以用来制 ...

  10. CF思维联系– CodeForces - 991C Candies(二分)

    ACM思维题训练集合 After passing a test, Vasya got himself a box of n candies. He decided to eat an equal am ...