zoukankan      html  css  js  c++  java
  • 2019PKUTHU WC题解

    PKU:

    机试:

    d1t1:

    考虑拓扑序的合法性,每个点的入边必须先加入。f[S]表示先出来的是S集合的点,对应边的方案数。加入x的时候,把入边方向确定,出边自然后面会确定的

    2^n*n

    d1t2:

    虚树,点数=边数+1,NTT,

    先咕咕咕

    d1t3:

    地主斗。。。

    炸弹,火箭先处理

    剩下牌的特征值(每个方式最大的),以及对应的牌数

    hash表存一下

    然后再找B的

    特征值要状压,还要边加入边计算特征值。

    d2t1:

    a[i]=0的部分分:

    分成n段

    每个点在每个段的方案数有相同之处

    f[i][j]表示前i个,第i个取再前j段的前缀和

    转移的时候

    枚举最左边选择j的l

    l到i的部分就是盒子放球的问题

    据说是APIO赛艇弱化版0?

    满分:

    区间dp

    dp[i][l][r],前i高位,确定了[l],[r]方案数

    还要什么数位dp记录0/1

    咕咕咕咕

    d2t2:

    两个环有公共边,

    一定在一个SCC里

    反之,可能八字图情况,在SCC里,却没有公共边

    先求出SCC

    再在SCC中求出点双连通分量个数,和就是ans

    SCC中不是V-DCC的环坑定没有公共边

    SCC中的V-DCC一定还是SCC

    而且没有上面的情况了

    所以就是一个联通块

    d2t3

    每个圆被完全覆盖就可以删掉

    n^2*m部分分

    两种方法:

    ①圆的面积并

    ②对于i,找到最左最右的圆和i的交的角度

    记录红色角的最大值

    左边同理

    如果角相互有覆盖,A0就被覆盖了

    发现所有剩下的点

    都在{A0,A1,,,An,O}组成的凸包上

    而且是严格的,也即不会存在一个点在凸包的边上

    简单证明:

    对于共线的三个点,中间的一定可以删除

    对于和A,O共线并且在A,O中间的点一定可以删除

    对于凸包内部的点一定可以删除

    凸包上的点一定删不掉

    O是变化的

    对于{Ai}先建立凸包

    每个O

    1.判断O是不是在凸包内部或者边上

      方法可以是:求x往下的射线和凸包交点的个数,把凸包劈成上下两个部分,分别二分出经过该射线的凸包的边,看有没有交即可。

    如果在内部,直接输出凸包点的个数即可。

    2.如果O在凸包外部

    二分包住的部分删掉。

      方法可以是:

      劈成上下两个部分

      对O分四种情况讨论

    对于B,D位置,直接对上/下凸壳二分即可

    对于A,C位置,对上下两个凸壳分分别二分找到第一个和下一个边的叉积为正的点,删掉中间的点即可

    O(nlogn+mlogn)

    数学:

    10个填空题,150min

    T1:

    8个点的树,2个点度数3,2个点度数2,4个点度数1

    求不同的树的个数(定义为,编号a和编号b之间的边存在情况都相同才相同)

    prufer序列,暴力枚举生成树然后判断

    或者考虑度数为3的点的连接情况,分类讨论+hash(hash不能随便写,所有的边排序之后,i是第i条边,大概用(x*131+y)*i*(i^(i*233)这种越复杂越好,多个hash也可以)

    T2:

    单位立方体ABCD-A'B'C'D',从A到C',只能走棱,或者面的对角线

    路径不能自交(包括点,棱上)

    求A到C'的最长路

    3+4sqrt(2)

    最多走7次

    可以对顶点黑白染色

    对角线走到同色点,棱走到异色点

    A,C'不同色,所以走奇数次棱

    由于1+6sqrt(2)不存在方案

    所以3+4sqrt(2)最优

    THU

    d1t1:

    原题:bzoj5016一个简单的询问

    推式子,考虑每一个信封在所有情况中的贡献之和

    就是sum1k*sum2k

    可以把询问二维差分一下

    莫队搞定

    d1t2:

    每个铁路的开通时间计算出来,

    整体二分+bfs处理分治

    考虑有没有铁路网,大力分情况讨论

    d2t1:

    主席树智障送分题

    d2t2:

    部分分:

    n ^2询问任意两个点,看总距离是否为1,确定有无树边

    次数小于1000000?

    rand一个根,再n-1次询问,找到每个点的深度

    深度相差1的才询问

    乱搞,可以过。

    d2t3:

    就是找所有凸包的方案数,面积和,面积平方和

    三者本质都相同

    考虑求凸包的过程——先要找到左下角的点

    枚举左下角的点x

    其他x右上方的点按照和x的极角排序

    f[i][j][k]表示,前i个点,凸包最后一个是j,倒数第二个是k,枚举下一个是否加入即可

    O(n*n^3)

    考虑枚举i之后,

    g[j][k]表示,最后一个是j,倒数第二个是k的答案

    固定j,把剩下的点按照对j的极角序排序

    可以双指针,一个枚举t,一个枚举k

    把g[j][k]转移到g[t][j]

    复杂度O(n*n^2)

  • 相关阅读:
    第三十三天 客户机和tcp多个客户端通信
    第三十二天黏包问题及解决方法:
    第三十一天 udp通信和黏包
    第三十天网路的基础
    第二十九天日志和config模块:
    Linux系统开机显示BusyBox v1.22.1 built-in shell(ash) 解决方法
    MTK迁移Oracle单库
    Ubuntu14.04安装mysql
    Ubuntu14.04下tomcat的安装
    Thinking in Java Chapter4 Exercise10 吸血鬼数字
  • 原文地址:https://www.cnblogs.com/Miracevin/p/10327637.html
Copyright © 2011-2022 走看看