Codeforces Round #551 (Div. 2) EF Solution
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的更多相关文章
- 【Codeforces】Codeforces Round #551 (Div. 2)
Codeforces Round #551 (Div. 2) 算是放弃颓废决定好好打比赛好好刷题的开始吧 A. Serval and Bus 处理每个巴士最早到站且大于t的时间 #include &l ...
- 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 ...
- Codeforces Round #551 (Div. 2) 题解
CF1153A 直接做啊,分类讨论即可 #include<iostream> #include<string.h> #include<string> #includ ...
- Codeforces Round #551 (Div. 2) D. Serval and Rooted Tree (树形dp)
题目:http://codeforces.com/contest/1153/problem/D 题意:给你一棵树,每个节点有一个操作,0代表取子节点中最小的那个值,1代表取子节点中最大的值,叶子节点的 ...
- Codeforces Round #551 (Div. 2) E 二分 + 交互
https://codeforces.com/contest/1153/problem/E 题意 边长为n的正方形里面有一条蛇,每次可以询问一个矩形,然后会告诉你蛇身和矩形相交有几部分,你需要在最多2 ...
- Codeforces Round #551 (Div. 2) D 树形dp
https://codeforces.com/contest/1153/problem/D 题意 一颗有n个点的数,每个点a[i]为0代表取子节点的最小,1代表取最大,然后假设树上存在k个叶子,问你如 ...
- Codeforces Round #551 (Div. 2)
传送门 B. Serval and Toy Bricks 题意: 有一些规格相同的方块摆放在 n×m 的矩阵 h 中,h[i][j]代表第 (i,j) 个矩阵摆放的方块的高度: 现给你三个视图: 正视 ...
- Codeforces Round #551 (Div. 2) D. Serval and Rooted Tree (树形dp)
题目链接 题意:给你一个有根树,假设有k个叶子节点,你可以给每个叶子节点编个号,要求编号不重复且在1-k以内.然后根据节点的max,minmax,minmax,min信息更新节点的值,要求根节点的值最 ...
- Codeforces Round #551 (Div. 2) A-E
A. Serval and Bus 算出每辆车会在什么时候上车, 取min即可 #include<cstdio> #include<algorithm> #include< ...
随机推荐
- 克拉克拉(KilaKila):大规模实时计算平台架构实战
克拉克拉(KilaKila):大规模实时计算平台架构实战 一.产品背景:克拉克拉(KilaKila)是国内专注二次元.主打年轻用户的娱乐互动内容社区软件.KilaKila推出互动语音直播.短视频配音. ...
- Java读取Excel指定列的数据详细教程和注意事项
本文使用jxl.jar工具类库实现读取Excel中指定列的数据. jxl.jar是通过java操作excel表格的工具类库,是由java语言开发而成的.这套API是纯Java的,并不依赖Windows ...
- asp.net引用System.Speech实现语音提示
using System; using System.Speech.Synthesis; namespace testvoice { class Program { static void Main( ...
- springmvc实现视频上传+进度条
前台表单: <form id="uploadform" method="post" enctype="multipart/form-data&q ...
- IEC104协议规约解析
一.四遥信息体基地址范围 104调度规约有1997年和2002年两个版本,在流程上没有什么变化,02版只是在97版上扩展了遥测.遥信等信息体基体址,区别如下: 类别 1997版基地址 2002版基地址 ...
- Java list.remove( )方法需要注意的地方
List<Integer> integerList = new ArrayList<>(); 当我们要移除某个Item的时候 remove(int position):移除某个 ...
- SpringBoot 配置定时任务
SpringBoot启用定时任务,其内部集成了成熟的框架,因此我们可以很简单的使用它. 开启定时任务 @SpringBootApplication //设置扫描的组件的包 @ComponentScan ...
- 系统前端基本文件+ajax部分理解
静态页面: 一.static: css dist fonts images js model 二.templates: html ajax搜索操作: <html> <head> ...
- macos 常用快捷键及操作
通用: 拷贝相当于window下的复制非苹果键盘(command == win option == alt control == ctrl)Command + C 拷贝(Copy)Command + ...
- Linux 环境 Java JDK 安装&基本配置
索引: 目录索引 参看代码 GitHub: jdk.txt 一.Linux (DeepinOS) 环境 1.官网下载 jdk-8u112-linux-x64.tar.gz 2.创建目录 mkdir - ...