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< ...
随机推荐
- Hbase给初学者的“下马威”
自从成为架构师()之后,李大胖的学习动力似乎少了一些,尤其是今年(当然也有一些客观因素). 临近岁末,内心着实有些惭愧,决定学习一把大数据.跟随一下业界前沿(其实已经不是前沿了),梦想着有一天能够拥有 ...
- [六]JavaIO之 ByteArrayInputStream与ByteArrayOutputStream
功能简介 ByteArrayInputStream 和 ByteArrayOutputStream 提供了针对于字符数组 byte [] 的标准的IO操作方式 ByteArrayInp ...
- 在windows中创建.gitignore文件
1.先任意创建一个文件,例如:1.txt 2.打开cmd命令行窗口,到1.txt目录下 windows7/8输入ren 1.txt .gitignore修改成功 windows10输入mv 1.txt ...
- MEF 基础简介 一
前言 小编菜鸟级别的程序员最近感慨颇多,经历了三五春秋深知程序路途遥远而我沧海一粟看不到的尽头到不了的终点何处是我停留的驿站.说了段废话下面进入正题吧! 什么是MEF? MEF:全称Managed E ...
- .NET: 谈谈C#中的扩展方法
扩展方法(Extension Methods)是C#3.0时引入的新特性,相信很多人都听过并且也都用过,最常见的是在LINQ中的使用. 不仅如此,在开发中,我们也可以创建自己扩展方法,使用它来优化类的 ...
- CentOS 7下用firewall-cmd
一 .控制端口/服务 可以通过两种方式控制端口的开放,一种是指定端口号另一种是指定服务名.虽然开放http服务就是开放了80端口,但是还是不能通过端口号来关闭,也就是说通过指定服务名开放的就要通过指定 ...
- JavaScript_01简介,基本语法,运算符
JavaScript(不是JScript和scriptease) 1.js分为内部引用和外部引用,无论是内部引用还是外部引用,都可以放在html(除标签内)的任意位置,但是定义的位置会影响执行的顺序 ...
- MySql 双主多从配置指导
MySql 双主多从配置指导 一.背景 互联网项目为了数据的可靠性和架构的可拓展性经常会用到双主多从的数据库,来实现数据的备份.负载均衡和突发状况时数据库切换. 二.思路 配置两台数据库A.B互为主从 ...
- 深入理解JavaScript作用域和作用域链
前言 JavaScript 中有一个被称为作用域(Scope)的特性.虽然对于许多新手开发者来说,作用域的概念并不是很容易理解,本文我会尽我所能用最简单的方式来解释作用域和作用域链,希望大家有所收获! ...
- OOCSS(面向对象的CSS)总结
按钮样式库:buttons.css /* vue */ [v-cloak]{display: none} /* 滚动条 */ ::-webkit-scrollbar { width: 6px; hei ...