zoukankan      html  css  js  c++  java
  • 退役前的做题记录2.0

    2020.2.29

    ARC068E

    枚举(d)后再枚举位置的复杂度是调和级数,那么问题变成了如何不重复的算上每一个纪念品。

    注意到对于一个区间,当其长度(geq d)的时候一定会被统计到,而当长度(< d)的时候至多会在一个位置被统计到。

    树状数组维护当前区间长度(<d)的区间的贡献即可。

    code

    ARC067E

    暴力dp的复杂度是调和级数,于是只需要考虑快速计算贡献即可。

    我们枚举使用(k)个大小为(t)的物品,那么(f_i)转移到(f_{i+kt})的贡献就是:

    [dbinom{N-i}{kt}frac{(kt)!}{(t!)^kk!} ]

    暴力做就好了。

    code

    CF1303F

    动态图连通性?线段树分治?不是TLE就是MLE

    考虑一次修改将(x)改为(y),相当于在(x)的块内删边同时在(y)的块内加边。

    注意到题面保证(c_ileq c_{i+1}),也就是对每一种颜色,删边操作在加边操作之后才出现,那么我们可以将两种操作分开计算贡献。加边的贡献直接算,删边的贡献从后往前做就可以当做加边。

    code

    3.2

    ARC066E

    性质:

    • 括号不会加在(+)的后面。

    • 括号最多只会嵌套两层(括号的作用是修改其中的数的正负号,嵌套多于两层显然是无意义的)

    这样的话直接记当前有几个未闭合的括号然后转移就好了。

    code

    CF1320&1321

    sol

    3.3

    luogu6156

    素质反演一下得到答案:

    [sum_{d=1}^nmu^2(d)d^{k+1}sum_{p=1}^{lfloorfrac{n}{d} floor}mu(p)p^ksum_{i=1}^{lfloorfrac{n}{dp} floor}sum_{j=1}^{lfloorfrac{n}{dp} floor}(i+j)^k ]

    这里用数论分块套数论分块貌似是(O(n^{frac{3}{4}}))的,由于博主不会证明故略过(雾)

    考虑一下怎么处理上面那三个函数的前缀和,只要线筛的时候求出(mu,id^k,id^{k+1})就能做前两个,第三个(记作(f(n)))的话考虑一下(f(n) o f(n+1))

    [egin{aligned} f(n+1)-f(n)=&sum_{i=1}^nsum_{j=1}^{n+1}(i+j)^k+sum_{j=1}^{n+1}(n+1+j)^k-sum_{i=1}^nsum_{j=1}^{n}(i+j)^k\ =&sum_{i=1}^n(i+n+1)^k+sum_{j=1}^{n+1}(n+1+j)^k end{aligned} ]

    于是只要扩大线筛的范围就做完了。

    code

    ARC069E

    字典序其实就是“让较小的数尽量早出现”。

    为了达到这个“尽量早出现”,我们肯定每次选取石子最多的堆来取石子。同时记一下当前可以成为最大值的最小的编号就完事了。

    code

    ARC067F

    最简单的想法是枚举区间((l,r)),同时对(forall iin[1,m])找出最大的(B_i)并将其累加。显然超时。

    考虑只枚举(l), 注意到如果倒序枚举的话对每个(i)维护一个单调栈就可以找到最优决策,最优决策带来的贡献可以直接开差分数组做。最后枚举(r)的时候扫过去就行了。

    code

    3.4

    CF1305D

    注意到如果回答的( m{LCA})是叶子的话那么这个叶子必然是根。

    所以我们每次可以询问当前树的某两个叶子的( m{LCA}),如果没有找到答案的话就删掉它们。

    code

    CF1305E

    不难发现答案的上界为(sum_{i=1}^nlfloorfrac{i-1}{2} floor),且此时(a_i=i).

    如果(m)大于这个上界显然无解,否则我们找到最小的(p)使得(sum_{i=1}^plfloorfrac{i-1}{2} floor>m),之后(a_p)显然可以根据(m)剩下的部分直接算,其它位置直接赋类似无穷大的数即可。

    code

    CF1305F

    观察之后可以发现这样一个事实:假设最后所有数的(gcd)(2),那么原来每个数至多只需要操作(1)次,也就是(ans<n).

    之后大力猜想有很多数只会操作至多(1)次,于是随机一些位置,并且对每个位置将(x-1,x,x+1)的所有质因数暴力( m{check})一遍即可。

    code

    3.6

    CF1316D

    记从((i,j))出发的终点为(ed(i,j)).

    如果((i,j)=ed(i,j))那么这个位置肯定是X,并且其它的点(ed(i',j')=(i,j))的位置肯定能走到((i,j)),这个可以以((i,j))为源一遍bfs。

    对于剩下的(ed(i,j)=(-1,-1))的点,不难发现只要让它们自己内部连起来就好了。

    如果上面这一通操作下来还有未访问的点即为不合法点。

    code

    CF1316E

    如果我们已经确定了那些编入队伍的人,那么观众肯定是剩下的(a_i)中最大的(k)个。

    于是我们将所有人按照(a_i)从大到小排序,之后dp的时候就可以直接确定那些作为观众的人。

    code

    CF1316F

    先把答案写出来

    [mathrm{Answer}=sum_{i=1}^nsum_{j=1}^{i-1}a_ia_jfrac{1}{2^{i-j+1}}=sum_{i=1}^na_ifrac{1}{2^i}sum_{j=1}^{i-1}a_j2^{j-1} ]

    这样就能做到单组询问(O(1)),接下来考虑修改,由于贡献和(a_i)的排名有关,便可以用权值线段树来维护,把答案拆成(sum a_ifrac{1}{2^i})(sum a_j2^{j-1}),线段树维护在维护当前值域的答案的同时,维护上述两个值以及子树大小即可。具体实现参考了一下std.

    code

    3.8

    Codeforces Round #620 (Div. 2) 题解

    3.11

    hitachi2020E Odd Sum Rectangles

    题解搬运人(雾)

    (H=2^N,W=2^M), 首先考虑答案的上界,对于任意的两列(j_1,j_2(1leq j_1leq j_2leq W-1)), (S(a,b,j_1,j_2)=S(1,b,j_1,j_2)-S(1,a-1,j_1,j_2)), 故(S(*,*,j_1,j_2))的奇偶性只与(S(1,i,j_1,j_2))有关,那么此时的答案为:(S(1,i,j_1,j_2))为奇数的数量( imes S(1,i,j_1,j_2))为偶数的数量((0leq ileq H-1)). 其上界为((frac{H}{2})^2).同时合法的(j_1,j_2)(frac{W(W-1)}{2})对,故答案的上界为(frac{W(W-1)}{2} imes (frac{H}{2})^2).

    接下来我们通过给出构造方法证明这样的上界。

    先假设(N=M),接下来使用数学归纳法的思路,当(N=1)的时候矩阵只有1个数,直接填1即可。当已知(N=K)的答案,考虑由其得到(N=K+1)的答案。这里直接给出构造思路:在((2^K,2^K))的位置填上(1),其余的第(2^K)行或第(2^K)列的位置均填(0),剩下的部分是四个子矩阵,直接套(N=K)的答案就可以了(合法性的话考虑对是否包含(2^K)分类讨论即可)。

    (N eq M)的时候,可以先构造(max(N,M))的答案,再取其中的一部分即可。

    code

    3.20

    诈尸.jpg

    CF1292C

    考虑从小到大填数,并且判断每填完一个数后哪些(mathrm{mex}(u,v))发生了变化。在填完数(p)后,那些路径上已经有([0,p])的所有数的(mathrm{mex}(u,v))增大了1,我们希望每次加1的时候影响的点对尽可能最多。

    手画几个图不难发现:当([0,p])在一条路径上时能使收益最大化,且数(p)必然在路径的两端,于是直接记(f_{u,v})表示当前路径((u,v))上已经全部填上了数时的答案(不考虑未填的数),这个可以(O(1))转移。

    code

    3.21

    补了一下USACO 2020.2 Platinum的题目

    「USACO 2020.2 Platinum」Delegation

    二分答案,之后dfs整棵树,对每个点考虑其儿子向上连的链的长度,并将其两两合并,所有的操作均可以通过(mathrm{multiset})实现,合并的时候直接在(mathrm{multiset})里二分即可。注意根节点要特判一下。

    code

    「USACO 2020.2 Platinum」Equilateral Triangles

    由于在曼哈顿距离意义下距离一个点相同的点构成一个斜(45^{circ})的正方形边界,故将坐标系旋转(45^{circ})后转为切比雪夫距离。

    通过画图可以发现,此时必然有两个点的某一个坐标相同,具体的,假设这两个点的坐标为(A(x_1,y_1),B(x_2,y_1))(x_2-x_1=k),那么不难发现(Cin{(x_3,y_3)|x_1leq x_3leq x_2,y3=y_1pm k}).纵坐标相同时同理,但是为了减掉三个点之间的任两个点都有一个坐标相同的情况,不能考虑取等的方案数。

    code

    「USACO 2020.2 Platinum」Help Yourself

    记全集(U=S),那么将幂用斯特林数展开。

    [sum_{Tsubseteq S}ans(T)^k=sum_{Tsubseteq S}sum_{i=0}^kS(k,i)i!dbinom{ans(T)}{i}=sum_{i=0}^kS(k,i)i!sum_{Tsubseteq S}dbinom{ans(T)}{i} ]

    其中(S(n,m))表示第二类斯特林数。

    考虑对(forall iin[0,k])维护(sum_{Tsubseteq S}dbinom{ans(T)}{i}), 记(f_{i,j})表示当前的线段集合的最大的右端点为(i), 组合数的一维为(j)时上式的值,我们将所有线段按左端点排序。那么在加入一条线段([l,r])时:

    • (iin [1,l-1]),在原集合中不存在与当前线段的交,也就是当前线段对所有的(ans(T))均有(1)的贡献,又因为(dbinom{ans(T)+1}{i}=dbinom{ans(T)}{i}+dbinom{ans(T)}{i-1}), 所以(f_{1 cdots l-1})(f_r)的贡献可以通过简单的累加得出。

    • (iin [l,r-1]),在原集合中存在与当前线段有交的部分,所以(f_{lcdots r-1})均对(f_r)有其原值的贡献。

    • (iin [r+1,2n]), 对每个(f_i), 是否选这条线段都不会对答案有影响,因为以(i)为右端点的线段一定包含了当前的线段([l,r]), 故(f_{r+1cdots 2n})都要( imes 2).

    上述的所有操作均可以使用线段树维护,复杂度为(O(nklog n)).

    code

    3.23

    打了一场模拟赛,又垫底了。

    T1

    以下论述保证(A_i<B_i).

    (T_j)的值分类讨论,考虑每一次操作后卡牌上的值是什么。

    • (T_j<A_i), 那么这一次操作对这张牌没有影响。

    • (A_ileq T_j<B_i), 那么无论操作前牌上的数是什么,操作后牌上的数都是(B_i).

    • (T_jgeq B_i), 那么这一次操作一定会使得这张卡翻面。

    注意到操作2的性质非常的好,那么对每张卡,可以直接使用权值线段树找到最后一次操作2发生的时间,之后只要考虑操作3发生的次数即可。这是一个简单的二维数点问题。

    如果(A_igeq B_i), 不难发现上述论证过程只与(max(A_i,B_i))有关,于是可以找出次数后按奇偶性讨论即可。

    code

    T2

    最小割树可以硬艹,但让我们更充分的利用以下这张图的性质。

    由于每个点的度数(leq 3),所以点对间的最大流也会(leq 3).

    如果最大流(leq 1), 则这两个点联通。

    如果最大流(leq 2), 则这两个点在同一个边双连通分量中。

    如果最大流(=3), 那么可以发现无论我们删去图上的哪一条边(即这条边在最大流中已使用过),这两个点仍在同一边双连通分量中,这个可以使用(mathrm{hash})判断。

    code

    2020.3.29

    vp了一场Codeforces Global Round 7,又垫底了。

    题解在这里

  • 相关阅读:
    java如何得到GET和POST请求URL和参数列表
    Java中,当表单含有文件上传时,提交数据的如何读取
    图片文件,图片文件流和BASE64加密字符串之间的转换,以及图片的BASE64加密字符串再jsp上如何显示
    Multipart/form-data POST文件上传详解(转)
    如何控制微信分享网页时,展示的标题,描述和图片
    微信的分享功能(针对web手机站页面进行的分享功能)
    关于linux下内存使用的一些疑惑[转载]
    【转】《高级前端3.6》JavaScript多线程——Concurrent.Thread.js, WebWork
    【转】javascript中的LHS与RHS
    [转] linux系统中如何进入退出vim编辑器,方法及区别
  • 原文地址:https://www.cnblogs.com/encodetalker/p/12387530.html
Copyright © 2011-2022 走看看