• NOI2020省队选拔赛前训练(打摆)记录


    Day -9

    打了一场省选模拟,又垫底了。

    T1

    带分类讨论,不想写。

    甚至数据出锅

    T2

    AGC020C

    T3

    读错题了还能拿到50pts

    首先先将坐标分开处理,记(s_i=sum_{j=0}^ix_j),且令(x_0=1),那么(Ans=sum_{i=1}^n[max(s_i,s_{i-1})>0][min(s_i,s_{i-1})<0]).

    考虑将((s_{i-1},s_i))看成一段区间,那么答案就是包含(0)的区间数量。

    注意到每次修改影响到的都是从当前指针开始的后缀,我们可以考虑将当前指针之后的区间全部丢入线段树中,这些区间会对应一个全新的零点(由于修改产生的位移),那么对坐标的修改可以考虑先减去之前的贡献,再加上修改后新的贡献即可。对指针的修改则可以直接加入/删去线段树中的一个区间。

    Day -7

    打了一场省选模拟,又垫底了。

    今天debuff真的严重,唯一的好消息可能只有把(看起来是)稍微码农的字符串写出来了。

    T1

    没有把这个题做出来,感觉思维有点危险。

    一个简单的暴力是记(f_{i,j})表示在经过了(i)条边后能否到达点(j)。这个东西可以暴力转移然后过掉sub2. 看起来这个可以矩乘转移,然后又注意到转移矩阵只有(O(c))种,看起来很可行。但是会被卡,注意到这个矩阵乘法可以只用and和or,于是可以用bitset优化矩阵乘法。

    T2

    注意到(prod_{i=1}^n a_i-(a_j-1)prod_{i=1,i eq j}^na_i=prod_{i=1,i eq j}^na_i),所以k次操作后产生的伤害和只与初状态和末状态有关,有一个显然的(O(nk^2))dp就不再说明。

    记第(i)个元素被减了(b_i)次,那么答案就是:

    [frac{1}{n^k}sum_{sum b_i=k}frac{k!}{prod b_i!}prod(a_i-b_i)=frac{k!}{n^k}sum_{sum b_i=k} prod_{i=1}^nfrac{(a_i-b_i)}{b_i!} ]

    后面那个东西很像一堆生成函数的某个次项,记(F_i(x)=sum_{jgeq 0}frac{a_i-j}{j!}x^j),那么后面那个东西就是([x^k]prod F_i(x)).

    [F_i(x)=sum_{jgeq 0} frac{a_i}{j!}x^j-sum_{j>0} frac{x^j}{(j-1)!}=a_ie^x-xe^x=(a_i-x)e^x\ prod_{i=1}^nF_i(x)=e^{nx}prod_{i=1}^n(a_i-x) ]

    后面的那个东西可以分治NTT做,之后枚举乘积的次数暴力算一算就好了。

    T3

    [ans(r)=sum_{w eq emptyset} F_r(W)sum_{i=1}^r accurance(w,s_i)=sum_{w eq emptyset}F_r^2(w) ]

    也就是对(forall rin[1,n])求出每个子串在(s_{1...r})中出现次数的平方。

    建出广义SAM,对parent树做树链剖分,每次枚举(r)时先找到对应节点再跳parent,用树链剖分加速这个过程的同时用线段树维护出现次数的平方和。看起来很复杂但是写起来异常的清晰。

    Day -4

    打了一场省选模拟,又垫底了。

    T1

    POI2014 Hotel

    T2

    [sum_{i=0}^clfloorfrac{ia}{c} floor=frac{na}{c}+sum_{i=0}^{frac{n}{c}-1}sum_{j=0}^{c-1}lfloorfrac{(ic+j)a}{c} floor=frac{na}{c}+csum_{i=0}^{frac{n}{c}-1}ia+frac{n}{c}sum_{i=0}^{c-1}lfloorfrac{ia}{c} floor ]

    考虑如何快速计算最后一项

    [sum_{i=0}^{c-1}lfloorfrac{ia}{c} floor=sum_{i=0}^{c-1}(frac{ia}{c}-frac{ia\%c}{c}) ]

    第一项就是个等差数列求和,对第二项,记(d=gcd(a,c)),不难发现(ia\% c)是一个以(d)为周期的数列,且每个周期内的数从大到小排列为(jd(0leq j<frac{c}{d})),故

    [sum_{i=0}^{c-1}lfloorfrac{ia}{c} floor=frac{c(c-1)}{2}frac{a}{c}-d^2frac{(frac{c}{d}-1)frac{c}{d}}{2c}=frac{a(c-1)-(c-d)}{2} ]

    直接计算即可

    T3

    建出广义SAM,然后那询问串暴力在上面跑匹配即可。在parent树上预处理出每个点到根节点的链中所有节点对应的串的总个数。这样可以在之后的匹配的统计答案中避免暴力跳parent

    Day -3

    打了一场省选模拟,又垫底了。

    T1

    (a_n)为所求,那么有(a_n=sum_{i=1}^{n-1}a_i+n^k).

    (s_n=sum_{i=1}^na_i),则(s_n=s_{n-1}+a_n=2s_{n-1}+n^k),并将问题转化为求(s_n)

    再次化简得到(frac{s_n}{2^n}=frac{s_{n-1}}{2^{n-1}}+frac{n^k}{2^n}).于是可以考虑求数列({frac{n^k}{2^n}})的前缀和。

    由于根据数据范围的要求我们需要一个与(k)相关的算法,所以在算这个前缀和的时候我们需要枚举的下标不是(n)而是(k)

    (f_k=sum_{i=1}^nfrac{i^k}{2^i}),则由错位相减法知

    [egin{aligned} f_k-frac{1}{2}f_k=&sum_{i=0}^{n-1}frac{(i+1)^k}{2^{i+1}}-sum_{i=1}^nfrac{i^k}{2^{i+1}}\ =&frac{1}{2}-frac{n^k}{2^{n+1}}-sum_{i=1}^{n-1}frac{(i+1)^k-i^k}{2^{i+1}}\ =&frac{1}{2}-frac{n^k}{2^{n+1}}-sum_{i=1}^{n-1}frac{sum_{j=0}^k{kchoose j}i^j-i^k}{2^{i+1}}\ =&frac{1}{2}-frac{n^k}{2^{n+1}}sum_{i=1}^{n-1}frac{sum_{j=0}^{k-1}{kchoose j}i^j}{2^{i+1}}\ =&frac{1}{2}-frac{n^k}{2^{n+1}}+sum_{j=0}^{k-1}{kchoose j}sum_{i=1}^{n-1}frac{i^j}{2^{i+1}}=frac{1}{2}f_k\ end{aligned} \ f_k=1-frac{n^k}{2^n}+sum_{j=0}^{k-1}{kchoose j}sum_{i=1}^{n-1}frac{i^j}{2^i}=1-frac{n^k}{2^n}+sum_{j=0}^{k-1}{kchoose j}(f_j-frac{n^j}{2^n}) ]

    预处理出(2^n,n^i)即可。

    T2

    维护的是(prod_{i=1}^n (A_ix+B_i))的最低的(c)次项,由于(c)很小可以直接用线段树存每个区间的多项式的积。

    T3

    考虑如何使用最小割解决这个问题。

    钦点(1)号点与(s)相连,再枚举一个一定和(t)相连的点,两条边的流量均为正无穷,跑最大流求出最小割即可。

  • 相关阅读:
    《JavaScript》forEach()和map()
    《JavaScript》split和join
    09慕课网《进击Node.js基础(一)》HTTP-get/request
    08慕课网《进击Node.js基础(一)》事件events
    07慕课网《进击Node.js基础(一)》HTTP小爬虫
    06慕课网《进击Node.js基础(一)》作用域和上下文
    05慕课网《进击Node.js基础(一)》HTTP概念进阶(同步/异步)
    前端每周学习分享--第4期
    前端每周学习分享--第3期
    前端每周学习分享--第2期
  • 原文地址:https://www.cnblogs.com/encodetalker/p/13109833.html
Copyright © 2020-2023  润新知