zoukankan      html  css  js  c++  java
  • 省选模拟28 29

    昨天的
    A. 战略游戏
    题意:n个点的树,选出k个无序点对,走路径,要求每条边满足(被所有经过)或(只被一个经过)或(不经过),且被所有经过的边个数>0,求方案数。n,k<=1e5
    暴力枚举都没想到,枚举经过所有的路径的两个端点x,y,答案为分别在x和y的不同子树中选k个的方案数乘积之和。
    也可以选到x和y的根,所以枚举有多少没有选到根,乘上A(k,i),求和。
    考虑能不能预处理x的不同子树选k个的方案数(f[x]),构造生成函数(F(x)=prod(sz_ux+1)),可以分治fft求解
    那么(f[x]=sum [x_i]F(x)A(k,i))
    统计答案有两种:
    x,y无祖先关系:树形dp
    有祖先关系:不同在于,较浅的点的f包含了y所在的子树而不包含父亲。方案的变化为(frac{(n-sz_u)x+1}{sz_vx+1}),都是一次多项式,模拟竖式做除(O(degree))
    设变化后的多项式(G(x)=F(x)frac{(n-sz_u)x+1}{sz_vx+1}),那么如果把(G(x))都处理出来复杂度不对。
    但是可知(u)(sz_v)不同取值只有(sqrt{sz_u})种,所以复杂度是(nsqrt n)

    B. 小b爱取模
    区间加转化为差分。
    直接差分就能得到一组解,但由于是模k意义下,不一定最优。
    -x=-x+k,所以一个点既可以是左端点也可以是右端点
    答案统计放在左端点,也就要贪心使得右端点更多。
    所以默认都作为右端点,当前缀和<0的时候,从前边选当前还能选的最大的a,反转为左端点。

    C. 小b爱实数
    (ans=min(|f-frac{s_r-s_l}{r-l}|)=min(|frac{(s_r-rf)-(s_l-lr)}{r-l}|))
    如果把((i,s_i-if))视为二维坐标系上的点
    要求的就是最小斜率,按纵坐标排序,答案一定在相邻的点间。

    今天的
    A. circle
    当k个点中也存在环那么无解
    不然问题可以简化为:n个黑白点,黑白各自形成DAG,求删掉最少的黑点使得整体形成DAG
    竞赛图形成DAG,只有一种形态,一条链,每个点向其后边所有点的点连边。
    可以求出黑白各自的拓扑序,一定唯一。
    有环那么一定是很多三元环组成,颜色有两种组合,白-黑-白这样的黑点必须删掉。
    否则对于一个还存在的黑点,其与白点的连边按拓扑序增大方向一定是 入-入-入-出-出-出,设第一个出为L[x]
    那么最多保留的黑点数其实就是L的LIS。必须删的点可以用L<=R判断

    C. simulate
    优化模拟。
    发现顺序是不重要的,可以不按照轮为阶段模拟。
    从1->n枚举i,保证<i的只有01,计算i对于左侧的贡献,而把对右侧的放到i+1上先不管。
    当a[i]>=2时分情况讨论:
    1.左侧有0:把最近的0右移一格,--a[i],++a[i+1]
    2.左侧无0:a[1]=0,--a[i],++a[i+1]
    3.i-1为0:a[i+1]=1,a[i]-=2,++a[i+1]
    用栈记录0的位置,对于1接3操作直接计算右移次数。
    复杂度为(O(n))

  • 相关阅读:
    账户经常被盗号怎么办?防盗“黑科技”了解一下
    京训钉自动播放,京训钉自动续播刷课时,京训钉自动关弹窗,自动下一课,倍速播放
    记账小程序
    “TensorFlow 开发者出道计划”全攻略,玩转社区看这里!
    maven的安装配置使用
    年轻就该多尝试,教你20小时Get一项新技能
    原生JS封装常用函数
    记账小程序
    java基础知识学习小总结(一)
    JavaSE集合类
  • 原文地址:https://www.cnblogs.com/hzoi-yzh/p/12354774.html
Copyright © 2011-2022 走看看