LJQ来讲题辣
然后就开始D人辣QAQ
题目1.
n 个点的有根树。
每次操作,随机选择一个结点,把以它为根的整个子树删去。
一直到删完为止。
问操作次数的期望。
n <= 100.
题解:
操作次数的期望 =
∑deli=删掉i的期望次数
deli=1∗1depi+0∗1depi−1
然后我们就知道操作次数的期望是多少了。
LJQ:这题我当时两分钟就想出来了。
题目2.
n 个灯的开关排成一排。最初,所有灯是关的。
每次操作,随机选择一个至少两个开关的区间 (l, r),改变区间中所有灯的开关状态(选择任何区间的概率等于 1/C(n,2))。
问 m 次操作以后亮着的灯的数目的期望。
n <=
103
, m <=
109
.
题解:
考虑总期望 =
∑m次操作后每盏灯亮着的期望
。
我们考虑第i盏灯操作一次:
操作两次的话同理,最后的式子通过矩阵乘法加速即可。
题目3.
n 个人玩石头剪刀布。
每个人每个回合随机出招。若一个回合能分成胜负两方则分开,分开后两方各自继续游戏。直到分成 n 个人时游戏结束。
求期望的游戏回合总数。
n <= 500.
题解:
用F[i]代表i个人玩的期望回合总数。
注意就是j = 0的时候要解方程,嗯这就没了。
题目4.
n 个点、m 条边的无向图,点 1 为迷宫出口。
你随机出生在某个点。每次操作,可以移动到一个相邻的结点,也可以选择随机传送到某一个结点(有可能仍在原先结点)。
问最优策略下到达出口步数的数学期望。
n, m <=
105
.
题解:
考虑最优策略一定是出现在某个临界点上,我们暴力找这个临界点肯定是能找的出来的,到时候就是对于比临界点优的,期望步数就是最短路,比临界点差的,F(i) = P(m,n) * (前面所有的比临界点优的这些东西的和的平均值) +1+ P(n - m,n) * F(i)
再解方程即可。
题目5.
平面上有 n 个点,问有多少个三元组组成:
1. 直角边平行于坐标轴的等腰直角三角形;
2. 斜边平行于坐标轴的等腰直角三角形。
n<=105.
题解:分块,处理每条直线即可。
题目6.
n 个点的无根树,每个点上有一些权值。
q 次询问。要么修改某个权值 xi,要么将某个权值移动到另一个点上,要么询问一条路径上最大的 k 个权值。
n,m<=4∗104,q<=105,k<=20,xi<=103.
题解:
树链剖分肯定是可以做的,问题在于可不可以乱搞个其它的。
LJQ表示可以,他表示二维树状数组 + dfs序 比树链剖分好写。
反正我是觉得树链剖分比较好写……
题目7.
n 行 m 列的地图,每个格子上有个 0..20 之间的整数。
每个格子与上下左右四连通。
问有多少条恰好 21 个格子的路径,使得 0..20 在路径上分别出现一次。
n, m <= 21.
题解:
折半搜索,用空间换时间,这样的话就可以搞了。
题目8.
P 校有 n 个新生,学号为 1 ~ n。以及 m 个社团。
社团活动日,第 i 个社团会给学号为 ai, ai + ci, ai + ci * 2, …, ai + ci * ki 的新生发传单。
已知恰好有一个学生收到的传单数为奇数。请问是谁?
n,m<=106.
题解:
详情见秦腾的某某计划,北京冬令营原题,思路是二分答案+前缀和。
题目9.
公司的 A 部门招聘 n1 人,B 部门招聘 n2 人。
n 个人来应聘。经过面试,对每个人有四个评估分数:q1, q2, c1, c2。
你要决定录取哪 n1+n2 个人以及分到哪个部门,使得
(∑q1 + ∑q2) / (∑c1 + ∑c2) 尽量大。
即分到 A 部门的 n1 个人的q1 之和加上分到 B 部门的 q2 之和,除以对应的 c1、c2 之和最大。
1 <= n1+n2 <= n <= 500,
1 <= c1, c2 <= 50,1 <= q1, q2 <= 2000.
题解:
考虑分数规划,二分答案之后然后背包,嗯……和背包很像。
然后复杂度是
O(n3)
的,考虑进行优化:
等等让我吐槽!
LJQ当时过来问我有没有多项式做法,我本来想说分数规划+DP,然而感觉好虚就没有说,感觉非常冤TAT
那个……这个好像是可以优化的,我们考虑把其中一个权值进行排序,然后降掉DP的一个状态即可,即f[i][j]表示前i个选了j个进A。
嗯……就这样QAQ
题目10.
狐狸叫(划掉):
有只狐狸在坐标 (0, 0) ,必须跳恰好 r 步到坐标 (tx, ty)。
设一步从 (x, y) 跳到 (x+dx, y+dy),则须满足 0 <= dx <= mx,0 <= dy <= my, 且 dx, dy 不能同时为 0。
此外,存在若干个数 bad[1..n],每次跳时 dx 和 dy 不能同时等于任意一个 bad[i]。
问方案数,模10,007。
n <= 50,tx, ty, mx,my, bad[i] <= 800,r <= 1600.
题解:
等等让我再吐个槽:
LJQ:如果不考虑Bad[i]你有什么好的方法吗?
我:就是暴力加一下……也没有什么的啊……
(我指的暴力加一下是:暴力DP加前缀和优化啊QAQ)
LJQ(满脸无奈):那坐标小于50你会做吗?
我当时的内心os:”???这不是不改也能过的吗?”
于是我很奇怪地说:还是暴力加一下啊……
LJQ:呃你不会统计方案数吗?
我的内心更懵逼了:”这我不是说了暴力加一下了吗?”
于是我没有说话。
然后过了一会听到我前面那个小哥回答的跟我的一模一样……
嗯只不过我认为那是暴力DP……
呃……
论不能跟FSF等人在一起讨论题从而导致什么DP都变成暴力DP的重要性。
不扯多了我们继续。
在没有bad的情况下,用f[i][j][k]表示第k步到达(i,j)的方案数。
肯定可以转移对吧。
然后我们前缀和优化一发。
但问题是有bad……
嗯这样的话我们考虑容斥原理,考虑:
Total - 走至少一步bad + 走至少两步bad - 走至少三步bad ……
g[i][j]表示前i个bad里走的x坐标为j的方案数。
走至少k步bad: C(r,k) * balabala,然后统计下就好了。
今天的题目到此结束,谢谢大家的收听。