03 2019 档案
摘要:A:阅读理解。显然l的可能取值至多只有4n种,暴力枚举即可,对于确定的l答案显然为nk/gcd(nk,l)。 B:对每个位置求出该位置上的数在排列中的下一个数在该位置后第一次出现的位置。以此倍增可以求出以每个位置为开头的合法子序列的最左右端点。查区间min即可。 C:y=x2+bx+c→y-x2=b
阅读全文
摘要:AB:div 3 AB??? C:div 1 C???场内自闭的直接去看D。事实上是个傻逼题,注意到物品相对顺序不变,二分边界即可。 D:显然对小模数取模后,大模数不会再产生影响。于是将模数从大到小排序,设f[i][j]为考虑了前i大模数后当前值是j的概率,转移考虑第i个模数是否在前缀单调栈中,若在
阅读全文
摘要:因为一大堆式子实在懒得写题解了。首先用prufer推出CF917D用到的结论,然后具体见前言不搭后语的注释。
阅读全文
摘要:显然转化为求不包含关键点的矩形个数。考虑暴力,枚举矩形下边界,求出该行每个位置对应的最低障碍点高度,对其建笛卡尔树,答案即为Σhi*(slson+1)*(srson+1),即考虑跨过该位置的矩形个数。 笛卡尔树就是treap,于是考虑利用treap将其动态维护,将hi设为treap的优先级。移动下边
阅读全文
摘要:考虑建一棵小根堆笛卡尔树,即每次在当前区间中找到最小值,以最小值为界分割区间,由当前最小值所在位置向两边区间最小值所在位置连边,递归建树。那么该笛卡尔树中的一棵子树对应序列的一个连续区间,且根的权值是这段区间的最小值。 在笛卡尔树上跑树形dp。设f[i][j]为在i子树对应棋盘中放j个车的方案数,且
阅读全文
摘要:A:倒序考虑,每次删除最后一个合法数即可,正确性显然。好久没有atcoder比赛我又忘了评测机并没有define online_judge白交了一发。 B:容易发现当n%4==0时,可以将图划分成一个二分图,使其两边和相等,然后中间所有边都连上即可。类似的可以发现,只要将图划分成若干和相同的集合即可
阅读全文
摘要:A:考虑每对最大值最小值的贡献即可。 B:考虑每次都询问x=i y=i+1。这样得到的是最近的被标记点是在左边还是右边。这样二分一下可以确定一个标记点的位置。同样二分找第二个点,由于要使其不和第一个点重复,对第一个点的两边分别考虑,二分过程中需要保证第一个点不对询问造成影响,讨论一下一些边界即可。
阅读全文
摘要:A:暴力枚举第一列加多少次,显然这样能确定一种方案。 B:显然每个数的贡献与组合数有关,找找规律发现讨论一下n%4的几种情况就行了。 C:显然依赖关系形成一棵树。设f[i][j]为i子树选j个的最小代价,其中根必须使用优惠券;g[i][j]为i子树选j个的最小代价,不能使用优惠券。直接背包即可,众所
阅读全文
摘要:A:暴力赋值即可,并查集维护下一个未被赋值的位置。 B:显然应该连成菊花套链。 C:注意到字符集大小很小询问串长度很短,对每种字符每种长度分别维护bit即可。 D:先跑一棵MST。对于不在MST中的边,显然要使其满足条件,其权值应比MST中两点路径上的权值最大值小。倍增查一下即可。对于在MST上的边
阅读全文
摘要:A:二分答案,从左往右考虑每个人,选尽量靠左的钥匙即可。 B:暴力,每次找到下一张被扔出去的牌并累加距离(即翻几张牌后会翻到)即可,距离用树状数组维护。 C:不考虑d是某数因子的特殊情况的话,相当于要求nd-Σai mod d<=k,最大化d。而ai mod d=ai-⌊ai/d⌋*d,众所周知⌊a
阅读全文
摘要:A:显然最优方案是对所形成的置换的每个循环排个序。 B:随机问1000个位置,然后找到x在其中哪个区间内暴力询问即可。注意最好不要rand。 C:容易发现重心的各棵子树的点集是不能改变的。然后一堆人比如我就扔个点分上去肯定就假了。事实上可以通过这种操作将任意一棵子树展开成链,链可以再转化成菊花,分别
阅读全文
摘要:D:从后往前考虑每个人,显然如果能移到最后一个人后方就应该立即移动,否则移不移没什么影响。链表暴力模拟这个过程即可。容易发现复杂度是线性的(判断两人间是否有边可能需要带log)。当然事实上根本不需要链表,直接检查其对后方未删除点的出度之和即可。 E:分块,每块维护第一个数和块的总和。注意到每次修改影
阅读全文
摘要:A:考虑每个质因子,显然要求次数之和是3的倍数,且次数之差的两倍不小于较小的次数。对于第一个要求,乘起来看开三次方是否是整数即可。第二个取gcd,两个数分别除掉gcd,之后看两个数的剩余部分是否都能被gcd整除即可。 B:显然有f[i][j]表示前i位分成j段的最大价值。考虑套路,在每个数最后一次出
阅读全文
摘要:A:甚至连题面都不用仔细看,看一下样例就知道是要把大的和小的配对了。 B:vp时拿命想都不会,结果一看sol发现idea还很大一部分是我自己造过的题,简直自闭。显然度数之和应该是偶数,先给不要求度数的随便分配一下满足要求。然后找一棵生成树,自底向上只选树边以满足度数要求即可。 C:我省去年初中组直接
阅读全文
摘要:A:显然每种字符的代价互不相关,dp并打表可得合并i个字符的最小代价是i*(i-1)/2。然后直接贪心分配每个字符即可。因为每次分配都将剩余代价降到了根号级别所以字符数量是足够的。 B:先找出每个会撞在一起的集合,然后可以发现相当于是在网格图中向某方向走遇到一个格点就拐个弯,讨论一下即可。 C:显然
阅读全文
摘要:A:求出该行该列各有多少个比其小的取max,该行该列各有多少个比其大的取max,加起来即可。 B:kmp求出最长border,贪心的每次利用这个border制造新子串即可。 C:场上写了1h假题意。终于看懂题之后又被之前假题意的做法带偏了。考虑拆点,建出新图后缩点,跑最长链即为答案。因为由图的特殊性
阅读全文
摘要:A:大胆猜想合法点不会很多,于是暴力检验,一旦发现不合法就break,可以random_shuffle一下。 B:暴力的想法是枚举最后所有数的gcd的某个质因子。于是考虑乱搞,先求出每个质数是多少个数的公共因子,显然可以得到只删数的最优答案;并且注意到要使所有数都变成偶数需要的代价不会超过nY看起来
阅读全文
摘要:A:显然构造一组只包含1和2面值的数据即可。 B:显然两种pizza的分配应尽可能贴近第二种更优和第一种更优的人数关系。于是在这个边界附近±1暴力枚举一下,然后贪心非常显然。 D:注意到在某一天卖出再买进对答案是没有影响的。于是维护一个小根堆,每次取出堆顶与当前天价格比较,若能赚钱则计入答案并将堆顶
阅读全文
摘要:A:显然应该尽量拆成4。如果是奇数,先拆一个9出来即可。 B:注意到由异或的消去性,事实上可以通过2n次询问得到所有n2种询问的结果。然后若第一个数确定,整个排列就确定了,暴力枚举即可。 C:同行同列相邻点连边,对每个连通块分别考虑。如果连通块构成一棵树,显然只要不选择所有直线,每种方案都能被构造出
阅读全文
摘要:A:显然从大到小排序后贪心放在第一个能放的位置即可。并查集维护。 B:对前后缀处理出答案,two pointers即可。 C:根据查询矩形边界将平面分成九块,讨论两端点位置即可,主席树支持查询矩形内点的个数。 D:显然每天要么不用优惠,要么就尽量用优惠。并且显然如果某天可以优惠到免费,使用优惠不会更
阅读全文
摘要:A:显然答案与原数的差不会很大。 B:即求不处于最右端的位置中有多少个1,随便维护。 C:按位考虑,倒序贪心,必须改(即前缀与后一个串相同且该位较大)的时候才改。全部扫过一遍后可能仍不合法,需要按同样的做法重新扫一遍,并且可以证明扫两遍之后依旧不合法则无解。 D:考虑枚举区间max,显然只要区间内存
阅读全文
摘要:A:考虑每一位的改变情况,分为强制变为1、强制变为0、不变、反转四种,得到这个之后and一发or一发xor一发就行了。 B:先按k=1的情况处理一下。然后若考虑首尾相接是否会超过m个,若会则删掉,若恰好有k个则继续删。最后如果只剩下一种数特殊讨论。坑点比较多。 C:考虑建图,a向b连边表示a可以打败
阅读全文
摘要:A:每次看是否有能走回去的房间,显然最多只会存在一个,如果有走过去即可,否则开辟新房间并记录访问时间。 B:注意到单个字母一定是出现次数最多的子串之一。所以如果给定字符串中有字符重复出现,一定无解。并且可以得到答案字符串中也一定没有字符重复出现,其长度<=26。于是怎么暴力都行了。考虑将所有串按长度
阅读全文
摘要:B:注意到nc/2<=m,于是以c/2为界决定数放在左边还是右边,保证序列满足性质的前提下替换掉一个数使得其更靠近边界即可。 D:相当于求有多少个-1 0 1构成的序列满足前缀和始终不小于0且总和在[l,r]中。这个前缀和限制非常容易想到卡特兰数,考虑类似的推式子方法,写出dp式子然后造一个网格图,
阅读全文
摘要:B:即使看到n<=22也应该猜到这只是为了写spj。将每个数替换为恰好比他大的数即可,最大值替换为最小值。这样原序列中不包含最小值的集合显然都满足条件,并且容易发现包含最小值的集合的变化量都是最大值-最小值+序列其他两个数的差,这显然是不会为0的。 C:容易想到随便跑一棵MST然后LCT维护MST,
阅读全文