zoukankan      html  css  js  c++  java
  • 杂题选讲(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(未做)

    扫描线

    题意

    题解

  • 相关阅读:
    python报错: invalid syntax
    python报错:not supported between instances of 'str' and 'int'
    python类型检查和类型转换
    python的input()函数
    为什么双击打开py文件时窗口瞬间关闭了?
    python条件判断语句
    python运算符的优先级
    JDK1.8 新特性(全)
    mysql事务详解
    Java判断指定日期是否为工作日
  • 原文地址:https://www.cnblogs.com/Robert-JYH/p/14736521.html
Copyright © 2011-2022 走看看