杂题选讲(LCH) 5.6 题解

1.[ICPC2018 WF]Gem Island

组合计数

题意

给定(n,d,r),求不定方程(sum_{i=1}^{n}x_i=d,x_ige 0)的一组解中前(r)大的值的和的期望。

(1leq n,dleq 500)

题解

如果仅仅是求解总方程的解数的话,即为(f(n,d)=inom{n+d-1}{d}).

我们换一个角度,从迭代的角度考虑方案数,我们每次选择(k)个数给它们多分一个,剩下可分的元素也都留给它们,相当于依据值的大小一层一层划分集合。

从这个角度来看,(f(n,d)=sum_{k}inom{n}{k}f(k,d-k)).

(g(n,d))表示所有解的前(r)大的值之和,利用上面的角度可以得出递推式:

[g(n,d)=sum_kinom{n}{k}(g(k,d-k)+min(r,k) imes f(k,d-k)) ]

最后答案即为(g(n,d)/f(n,d)+r)(加(r)是原题的题目背景导致),时间复杂度(O(n^2 d)).

本题在模意义下还有一种时间复杂度更优的做法,

2.[ICPC2018 WF]Conquer The World

模拟费用流

题意

模拟费用流,树上老鼠进洞问题。

要求每个老鼠(y)必须要进一个洞(x),洞有容量,洞可以不满。

(nleq 2.5 imes 10^5,sum y leq sum xleq 10^6)

题解

第一次打模拟费用流的题目,当一道题的所求与网络流相同,但网络流明显会超时时,可以根据题目特点模拟费用流,本题推荐博客

3.[CERC2015]Frightful Formula

组合计数

题意

已知(f_{i,1}=l_i,f_{1,i}=t_i,f_{i,j}=af_{i,j-1}+bf_{i-1,j}+c),求(f_{n,n}).

(nleq 2 imes 10^5)

题解

本题主要在于观察每类贡献如何计算,具体见博客.

4.[NEERC2016]Game on Graph

博弈论

题意

A 和 B 在玩一个有向图上的游戏。两人轮流操作,每次可以将棋子沿着其中一条边移动,不能移动者输。

你要对于每个点,分别求出以这个店为起点开始游戏,两人分别作为先手,最终会输,赢,还是平局(游戏无限循环)。

其中,A 更期望将游戏变为平局;B更期望游戏不要平局。当然,在不平局的基础上,两人都更希望赢。

(n,mleq 2 imes 10^5)

题解

首先判断一个点是否一定平局:

没有出度的点一定可以判断胜负,然后拓扑排序,若A能到的点中所有点均可以判断正负,他就得可以判断正负;若B能到的点中有一个点可以判断正负,他就能判断正负。此时没有遍历到的还上的点一定为平局。

然后对可以判断正负的点再拓扑一次,此时AB策略相同:若所有后继状态均另一人赢,则他必输;有一个状态另一人输,则他可赢。此时没有遍历到的环上的点一定为A赢B输(B宁愿输也不平局)。

5.[NWRRC2015]Graph

贪心 构造

题意

给定一张 有向无环图,你可以至多添加 (k) 条有向边,使得这仍然是一个有向无环图,使得字典序最小的拓扑序的字典序尽量大。

输出这个拓扑序以及方案。

(n,m,kle 10^5)

题解

细节很难完全想清楚的一道构造题,题解

备注:若最大堆为空或者最大堆中最大的节点编号小于当前节点,且当前拓扑序集合为空,为了防止出现环/为了防止由编号小的点连向编号大的点,不往最大堆中插入点。

6.[CERC2013]Escape

贪心 启发式合并 可并堆

题意

给定一棵大小为(n)的树,第一次进入每个节点时会增加或减少你的血量,初始血量为0,问血量不低于零的情况下能否从点(1)走到点(t)(1≤n≤2*10^5,abs(点权)≤10^6)

题解

这题感觉过题比较容易,但有些细节仍需思考。考虑用启发式合并/每个点维护若干个点对((x,y))表示若花费(x)的代价可以获得(y)的血量,首先当前点的新点对的血量为正,之后在保证(x)不增大的前提下继续合并,对于(t),我们将其连向一个新节点,获得(+inf)的血量,以确保我们一定会选择走向(t).

7.[CERC2013]Captain Obvious and the Rabbit-Man

递推关系

题意

定义 Fibonacci 数 (f_0 = 0, f_1 = 1, f_n = f_{n-1} + f_{n-2}) ((n ge 1)),有一个数列 (left{ a_n ight}) 满足 $ a_n = c_1 cdot f_2^n + c_2 cdot f_3^n + cdots + c_k cdot f_{k+1}^n $ 其中 (c_1, c_2, cdots, c_k) 为常数。

现在给定 (a_1, a_2, cdots, a_k)(hspace{-0.444em} pmod M) 时的值,你需要求出 (a_{k+1} mod M)

(nle 4000)

题解(待补)

本题涉及的前置知识较多,题做得差不多后再补题解。

8.[ICPC2016 WF]Longest Rivers

贪心

题意

题解

题解

9.[CF24D]Broken robot

概率期望 高斯消元 带状矩阵

题意

(n)(m) 列的矩阵,现在在$ (i,j)$,每次等概率向左,右,下走或原地不动,但不能走出去,问走到最后一行期望的步数。

(n,mle 10^3)

题解

转移方程易写出,但求解的话需要对带状矩阵进行高斯消元。

注意到这道题不要求写出模意义下的值,只要求求出近似值,这时候对于同一个状态反复转移不失为一个较好的策略。

带状矩阵

#include<bits/stdc++.h>
using namespace std;
const int N=1005;
double f[N][N],k[N];
int n,m,a,b;
int main(){
	cin>>n>>m>>a>>b;
	for(int i=1;i<=m;i++)k[i]=2+(i!=1)+(i!=m);
	for(int i=n-1;i>=a;i--)
		for(int t=0;t<100;t++)
			for(int j=1;j<=m;j++)
				f[i][j]=(f[i][j]+f[i][j+1]+f[i][j-1]+f[i+1][j])/k[j]+1;
	printf("%.10lf
",f[a][b]);
	return 0;
}

10.[CERC2015]Ice Igloos

计算几何

题意

给你(n)个圆,(m)条线段,求每条线段与多少圆相交。

(n,mleq 10^5,1leq x_i,y_i leq 500,0<r_i<1),各坐标均为整点

题解

可以说是平生第一道正式的计算几何题,

题解by aztl

11.[ICPC2017 WF]Money for Nothing

分治 决策单调性

题意

坐标平面上有 (m) 个红点,(n) 个蓝点。你需要找到一个边平行于坐标轴的矩形,使得它以一个红点为左下角,蓝点为右上角,且面积最大。

(n,mleq 5 imes 10^5,)

题解

学到了新东西——利用分治法维护决策单调性,在本题中相比单调栈维护更易于码代码。

题解

void divide(int l,int r,int nl,int nr){
	if(l>r||nl>nr)return;
	int mid=(l+r)>>1;
	ll res=-1e18;int Mid=0;
	for(int i=nl;i<=nr;i++)
		if(a[mid].x<b[i].x||a[mid].y<b[i].y)
			if(a[mid]*b[i]>res)res=a[mid]*b[i],Mid=i;
	if(Mid){
		divide(l,mid-1,nl,Mid);
		divide(mid+1,r,Mid,nr);
		ans=max(ans,res);
	}
}

12.[HEOI2013]SAO

组合计数 树形DP

题意

给定一个有向的树结构,需要安排选择节点的顺序,父子节点间有限制(父亲必须先选或者儿子必须先选),求方案数。

(nleq 1000)

题解(待补)

这道题在这篇博客提到的题中属于非常常规的一道题(这道题本身也不是杂题选讲的正式内容),或许THUSC后会自己码一份题解。

13.[NEERC2017]Knapsack Cryptosystem

阈值 Meet In the Middle 数论

题意

T1.PNG

题解

题解

学到的东西:

(1)按数据规模分类的思想

(2)Meet In the Middle算法

(3)同余式的除法

要注意:1<<64未定义,未避免RE,需写为2<<63

14.[ICPC2017 WF]Son of Pipe Stream(未做)

网络流 人类智慧

题意

题解

15.[NWRRC2017]Fygon 2.0(未做)

状压DP 计数

题意

题解

16.[ICPC2014 WF]Pachinko(未做)

概率期望 高斯消元 带状矩阵

题意

题解

17.[CERC2015]Cow Confinement(未做)

扫描线

题意

题解

原文地址:https://www.cnblogs.com/Robert-JYH/p/14736521.html