zoukankan      html  css  js  c++  java
  • 15 沈阳

    15 沈阳

    B

    D

    (k_1a+k_2b) 表示 (gcd(a,b)) 的倍数。

    E

    轮廓线DP,显然我们必须维护当前轮廓线的联通情况,选好状态表示很重要,
    我采取的憨憨表示法是每个点记录上一个和我联通的点的标号,这样状态数为m!<=5040(状态转移有点烦人)
    勇敢的朝着TLE就去了,但结果AC了
    这样表示的好处是状态相对较少,就不需要hash了,另外还可以事先删除掉不合法的状态,比如多个点有相同的前驱

    F

    (i) 只青蛙会访问到 (gcd(a_i, m)) 的倍数。先考虑 brute 的容斥,枚举青蛙子集,求出它们的 lcm,统计答案,如果子集 size 是奇数则贡献为正,否则贡献为负。注意到 lcm 种类数是 (O(因子个数)) 级别的。考虑 DP,(f[i][j][0/1]) 表示考虑前 i 只青蛙,lcm 为 j,size % 2 = 0/1 的集合方案数。

    G

    需要细心分类讨论

    • 特判掉 (v_1=0,v_2=0,v_1=v_2) 这些 corner case。
    • 三种策略:
      1. 去 23 边上拦截对手,去 2,3,4,1(可以注意到拦截越早越好)
      2. 直接去 34 边上拦截对手,再去 2,3,4,1
      3. 先去 2,再去 34 边上拦截对手,再去 3,4,1
    • 注意到 (v_2=3v_1) 是会 lose 的,因为结算顺序是先 touch 杆子,再斗殴。

    H

    反过来考虑,让障碍物去撞空格子,每个障碍物会在每一步撞一个空格子,所以复杂度为(O(o*l))
    由于题目卡空间,所以统计答案时可以分开考虑横纵坐标以及各个分量

    I

    ((a,b)(c,d,e))(b=e)安排进桶里,然后可以发现仅需保留最大的(a)然后笛卡儿积((b,e))即可,这样将得到(O(m))级别的待选答案,然后再排序去个重
    现在问题变成了给定若干个三元组,求哪些三元组是极大的
    可以使用cdq分治,二维树状数组(本题(c,d)范围很小),或一维树状数组

    L

    满足题目条件可以等价于如下:

    • 奇数点出度1,入度0
    • 偶数点出度0,入度1
    • 其他店出度1,入度1

    根据上述条件拆点跑费用流即可,(dij版本T,spfa版本A)

    M

    对团建个中间点,中间点向团内的点连 (w/2) 的边,dij 即可。

  • 相关阅读:
    python之np.tile()
    python中easydict的简单使用
    Python字典(Dictionary)update()方法
    Flutter学习之导航与数据的传输
    Flutter学习之重叠布局
    Flutter学习之重叠布局
    Flutter学习之纵向布局
    Flutter学习之纵向布局
    Flutter学习之GridView
    Flutter学习之GridView
  • 原文地址:https://www.cnblogs.com/FST-stay-night/p/11680494.html
Copyright © 2011-2022 走看看