E. Serval and Snake

对于一个矩形,如果蛇的一条边与它相交,就意味着这条蛇从矩形内穿到矩形外,或者从矩形外穿到矩形内。所以如果某个矩形的答案为偶数,意味着蛇的头尾在矩形的同一侧(内或外),否则意味着头和尾中一个在矩形内,一个在矩形外。

所以可以通过

for(int i = 2 ; i <= n ; ++i)
? i 1 n n

来询问出头和尾的横坐标。询问的答案从偶数变为奇数和从奇数变为偶数的位置就是头和尾分别的横坐标。对于纵坐标也这样做一遍。

可能存在头和尾在一条水平或者垂直直线上,这意味着横坐标或者纵坐标找不到答案。但因为头和尾的坐标一定不同,所以另一维坐标一定已知,所以可以在当前维度上二分求出未知的横/纵坐标。

上面方法求出了头和尾的横坐标和纵坐标,对应一个矩形的4个顶点,最后check一下它们的对应关系是左上、右下还是右上、左下。

代码

F. Serval and Bonus Problem

这是一道看完样例解释就不想做的题目……

因为坐标为实数,所以长度为\(l\)的答案等于长度为\(1\)的答案\(\times l\)。而长度为\(1\)时的问题等价于:任意选择\(n\)条线段,任意选择一个点\(P\)满足\(P\)被至少\(k\)条线段覆盖的概率。

而这个概率只和\(n\)条线段的端点和\(P\)点构成的\(2n+1\)个点的排列方式以及\(2n\)个线段端点的组合方式有关。考虑DP求出满足条件的方案数,然后除掉总方案数。

注意因为实数范围内rand两个数,它们相同的概率为0,所以认为任意两个点位置不同。

设\(dp_{i,j,k=0/1}\)表示考虑了前\(i\)个点,有\(j\)个线段端点没有找到对应的右端点,\(P\)点是否已经被放置的方案总数

转移:

①放一个\(P\)点:\(dp_{i,j,1} \leftarrow dp_{i-1,j,0}[j \geq K]\)

②放一条线段的左端点:\(dp_{i,j,k} \leftarrow dp_{i-1 , j-1 , k}\)

③放一条线段的右端点:\(dp_{i,j,k} \leftarrow dp_{i-1 , j+1 , k} \times (j+1)\)

满足条件的方案数就是\(dp_{2n+1 , 0 , 1}\)。注意这里DP出来的方案是无序的(按照右端点排序),所以下面的总方案数算的也是无序的。

接下来考虑总方案数。首先\(2n+1\)个点可以任意排列,所以方案数会有\((2n+1)!\),但是这样肯定是会算重的。

给每一个排列一个固定的意义:对于\((2n+1)!\)个排列,令第\(2n+1\)个数表示\(P\)的位置,\(2i\)与\(2i-1(i \in [1,n])\)是一条线段的左右端点。这样任意一种方案会恰好对应\(n!2^n\)个排列(\(n\)条线段可以任意排列,线段的左右端点在排列上可以互换),所以总方案数为\(\frac{(2n+1)!}{n!2^n}\)

所以答案为\(l\frac{dp_{2n+1,0,1} n! 2^n}{(2n+1)!}\)

代码

Codeforces Round #551 (Div. 2) EF Solution的更多相关文章

  1. 【Codeforces】Codeforces Round #551 (Div. 2)

    Codeforces Round #551 (Div. 2) 算是放弃颓废决定好好打比赛好好刷题的开始吧 A. Serval and Bus 处理每个巴士最早到站且大于t的时间 #include &l ...

  2. C. Serval and Parenthesis Sequence 【括号匹配】 Codeforces Round #551 (Div. 2)

    冲鸭,去刷题:http://codeforces.com/contest/1153/problem/C C. Serval and Parenthesis Sequence time limit pe ...

  3. Codeforces Round #551 (Div. 2) 题解

    CF1153A 直接做啊,分类讨论即可 #include<iostream> #include<string.h> #include<string> #includ ...

  4. Codeforces Round #551 (Div. 2) D. Serval and Rooted Tree (树形dp)

    题目:http://codeforces.com/contest/1153/problem/D 题意:给你一棵树,每个节点有一个操作,0代表取子节点中最小的那个值,1代表取子节点中最大的值,叶子节点的 ...

  5. Codeforces Round #551 (Div. 2) E 二分 + 交互

    https://codeforces.com/contest/1153/problem/E 题意 边长为n的正方形里面有一条蛇,每次可以询问一个矩形,然后会告诉你蛇身和矩形相交有几部分,你需要在最多2 ...

  6. Codeforces Round #551 (Div. 2) D 树形dp

    https://codeforces.com/contest/1153/problem/D 题意 一颗有n个点的数,每个点a[i]为0代表取子节点的最小,1代表取最大,然后假设树上存在k个叶子,问你如 ...

  7. Codeforces Round #551 (Div. 2)

    传送门 B. Serval and Toy Bricks 题意: 有一些规格相同的方块摆放在 n×m 的矩阵 h 中,h[i][j]代表第 (i,j) 个矩阵摆放的方块的高度: 现给你三个视图: 正视 ...

  8. Codeforces Round #551 (Div. 2) D. Serval and Rooted Tree (树形dp)

    题目链接 题意:给你一个有根树,假设有k个叶子节点,你可以给每个叶子节点编个号,要求编号不重复且在1-k以内.然后根据节点的max,minmax,minmax,min信息更新节点的值,要求根节点的值最 ...

  9. Codeforces Round #551 (Div. 2) A-E

    A. Serval and Bus 算出每辆车会在什么时候上车, 取min即可 #include<cstdio> #include<algorithm> #include< ...

随机推荐

  1. Python机器学习笔记 异常点检测算法——Isolation Forest

    Isolation,意为孤立/隔离,是名词,其动词为isolate,forest是森林,合起来就是“孤立森林”了,也有叫“独异森林”,好像并没有统一的中文叫法.可能大家都习惯用其英文的名字isolat ...

  2. 【转】Android开发笔记(序)写在前面的目录

    原文:http://blog.csdn.net/aqi00/article/details/50012511 知识点分类 一方面写写自己走过的弯路掉进去的坑,避免以后再犯:另一方面希望通过分享自己的经 ...

  3. JAVA Swing 改变标题栏左上角默认咖啡图标

    前言 最近使用Java的swing开发了一个小程序,想要实现改变标题栏左上角的图标,找了网上的资料,经过了一个下午的尝试,都是未能成功,最后,终于是在Java的一本书上找到了结果 我只能说,网上的东西 ...

  4. 【.Net Core】获取绝对路径、相对路径

    一.绝对路径 1.获取应用程序运行当前目录Directory.GetCurrentDirectory(). System.IO命名空间中存在Directory类,提供了获取应用程序运行当前目录的静态方 ...

  5. 关于HTTP中GET与POST的区别

    GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二. 看似很简单,其实是一道送命题 “标准答案”: GET在浏览器回退时是无害的,而POST会再次提交请求. ...

  6. 20190326-HTML5标签、CSS的引用

    目录 1.HTML5标签 H5前的DIV+CSS布局 H5解决的问题 H5新标签header.footer.nav.aside.article.address.main.figure.figcapti ...

  7. console对象探究

    作为一个前端,console.log()可能是你最常用的方法,打印打印再打印,但是其实console对象上有用的方法有很多,来,各位看官上眼 分类输出 厌倦了 console.log 单调的输出?欢迎 ...

  8. 【Dojo 1.x】笔记3 等待DOM加载完成

    有的web页面总是得等DOM加载完成才能继续执行功能,例如,待页面DOM加载完成后,才能在DIV上进行渲染图形. Dojo提供了这个功能的模块,叫domReady,但是由于它很特殊,就在结尾加了个叹号 ...

  9. offic|集成|协同OA|移动办公|

    随着互联网时代的日新月异,移动通讯技术的飞速发展,移动网络技术的更新换代,手机.平板电脑等移动设备越来越智能化.越来越多样化,人们对移动办公的需求也在日益增长.在此背景下北京博信施科技有限公司自主研发 ...

  10. ubuntu下解压rar文件

    ubuntu 下rar解压工具安装方法: 压缩功能 sudo apt-get install rar 1 解压功能 sudo apt-get install unrar 1 使用 可以直接在UI界面使 ...