一句话题解

2020.9.20

CF1118C Palindromic Matrix

大模拟,判断是否有矩阵是显然的,输出方案需要分奇偶。然后统计左上角方案最后映射即可。

CF1117A Best Subsegment

平均值即最大值,所以找最大值然后扫一遍持续出现最大值的最长区间即可

CF1117B Emotes

贪心,k次最大值,1次次大值,n/(k+1)次循环即可

CF1117C Magic Ship

预处理风的位移,然后求曼哈顿距离,最后二分天数

2020.9.21

CF1117D Magic Gems

可以列出状态转移方程: \(dp_i=dp_{i-1}+dp_{i-m}\) 但是 \(O(n)\) 状态下 \(n=1e18\) 是会 \(TLE\) 的,所以我们想到了用矩阵去优化。

CF1117E Decypher the String

交互题。构造的方法特tm妙,写一篇完整的题解

CF1117F Crisp String

不愧是F。继续写大题解

CF1117G Recursive Queries

可以将原式化为 \(\sum\limits_{i=l}^r\min(r,rb_i-1)-\max(lb_i+1,l)+1\) ,用单调栈预处理 \(lb,rb\) ,树状数组维护贡献。

CF821E Okabe and El Psy Kongroo

转移方程显然: \(dp_{i,j}=dp_{i-1,j-1}+dp_{i-1,j}+dp_{i-1,j+1}\) ,然后因为 \(k=1e18\) ,所以用矩阵优化。注意:每个线段进行一次快速幂

2020.9.22

CF954F Runner's Problem

和CF821E很像,但可能一个点被好几个线段覆盖,所以要去离散化,然后和CF821E一样用矩阵优化。时间复杂度 \(O(n\log n+27n\log m)\)

CF1182E Product Oriented Recurrence

\(f_i=c^{2x-6}\cdot f_{i-1}\cdot f_{i-2}\cdot f_{i-3}\) 化成 \(f_i=c^{w_i}\cdot f_1^{x_i}\cdot f_2^{y_i}\cdot f_3^{z_i}\) ,然后分别推出递推方程,用矩阵加速,最后快速幂求出 \(f_n\)

CF1151F Sonya and Informatics

大题解

2020.9.23

CF1153C Serval and Parenthesis Sequence

贪心。首先,\(n\) 为奇数是不行的。要不匹配的前缀,那就把 \('('\) 尽可能往左放,然后判断当前是否满足题意。

P3959 宝藏

因为 \(n\leq 12\) ,所以想到了状压DP。但是状态不太好设计:将 \(dp[S][j]\) 设为 \(S\) 状态下树的高度为 \(j\) 的最小花费,则状态转移方程为: \(dp[S][j]=dp[S'][j-1]+j*dis(S-S')\)\(S-S'\) 为第 \(j\) 层要枚举的点,\(dis\) 是当前层到 \(S'\) 的最短距离。

P1772 [ZJOI2006]物流运输

看起来有点难,其实还好。想一个DP: \(dp_i=\min(dp_i,dp_j+cost_{j+1,i}*(i-j)+k)\) ,其中 \(dp_i\) 表示前 \(i\) 个点的最少花费,则 \(dp_n\) 即为答案。至于 \(cost\) ,因为 \(1\leq m\leq 20\) 所以瞎🐓用 \(dijkstra\) 求。

P1948 [USACO08JAN]Telephone Lines S

贪心去想,那肯定是让费用大的免费,则总花费就是 \(k+1\) 大的电线了,那么可以二分花费,将花费比它小的权值为 \(0\) ,比它大的设为 \(1\) ,每次 \(check\) 一遍最短路,看是否大或小于 \(k\)

UVA12124 Assemble

二分质量,判断准点就行了。可以拿 \(map\) 存信息

P2114 [NOI2014]起床困难综合症

将一个全 \(1\) 的字符串和一个全 \(0\) 的扔进去跑一遍,因为每一位互不影响,所以贪心的找每一位的 \(1\)

CF767E Change-free

贪心。预处理每天如果找零所增加的怒气值,然后扔进优先队列。默认每天坚持用零钱,哪天零钱不够了,就把堆顶拿出来。

CF385C Bear and Prime Numbers

类似埃式筛。把每个素数的 \(f\) 预处理出来,可以再顺便搞一个前缀和,然后直接查询。

CF1225D Power Products

显然,满足条件当且仅当两个数分解完质因数各质因子数量之和为 \(k\) 的倍数,可以用 \(map\) 存储。

CF359C Prime Number

大题解

CF113C Double Happiness

一个我没听说过的费马二次方定理可知,只有形式为 \(4k+1\) 的质数才能表示成 \(t=a^2+b^2\) 。筛一遍就行。

2020.9.24

CF327C Magic Five

大题解

CF223C Partial Sums

简单的能发现规律,第 \(k\) 次后, \(a_1=C_k^k\cdot a_1,a_2=C_{k+1}^k\cdot a_1+C_k^k\cdot a_2,\cdots,a_n=C_{k+n-1}^{k}\cdot a_1+C_{k+n-2}^k\cdot a_2+\cdots+C_k^k\cdot a_n\) ,然后快速幂就行了。

CF336D Vasily the Bear and Beautiful Strings

\(1\) 的规律,然后分奇偶放,用组合数求和。特判 \(n=0,m=0,m=1\) 的情况

CF439E Devu and Birthday Celebration

先将 \(\gcd(a_i)=1\) 转化为 \(\sum\limits_{d\mid \gcd(a_i)}\mu(d)\) ,然后往下推式子,加个插板法的组合数。

CF959F Mahmoud and Ehab and yet another xor task

利用线性基。设线性无关的为 \(tot\) ,当前为 \(l\) ,答案就是线性有关的选或不选: \(2^{l-tot}\)

CF385E Bear in the Field

大题解

P6772 [NOI2020]美食家

将每个点按照 \(w_i\) 拆开,然后搞一个类似于矩阵快速幂的矩阵快速幂。因为有美食节,所以分段转移,再用 \(2\) 次幂和向量矩阵优化一下,时间复杂度就为 \(O((5n^3)\log T+(5n)^2k\log T)\)

P3661 [USACO17FEB]Why Did the Cow Cross the Road I S

贪心,按照 \(T\) 排序,然后将牛扔进小根堆,一个一个配对,不行的就踢。

P3659 [USACO17FEB]Why Did the Cow Cross the Road I G

bfs搜一遍就行了。没有啥细节,搞个循环队列减小空间复杂度也就是极限了。

P3656 [USACO17FEB]Why Did the Cow Cross the Road I P

即求逆序对,发现第一位到最后一位变化的贡献是 \(-(n-x),+(x-1)\) ,遍历即可。

2020.9.25

CF886B Vlad and Cafes

模拟。

P4315 月下“毛景树”

树链剖分板子题。

CF982E Billiard

大题解

CF107B Basketball Team

大题解

2020.9.26

CF1251E2 Voting (Hard Version)

贪心。用一个 \(vector\) 将每个 \(m\) 的所有 \(p\) 存进去,然后降序将 \(p\) 扔进一个优先队列里,人不够就选堆顶,够了就继续。

CF392E Deleting Substrings

大题解

CF1420A Cubes Sorting

注意到 \(\dfrac{n(n-1)}{2}\) 是单调递减的数列的操作次数,所以只要判断输入序列是否是递减的即可。(神仙拿树状数组求的逆序对)。

CF1420B Rock and Lever

因为 \(\&\)\(\oplus\) 的性质,所以我们判断每个数二进制 \(1\) 的最高位,然后用组合数求。

CF1420C2 Pokémon Army (hard version)

找单调性。只有峰和谷才会被选择,当 \(l,r\) 换了位置,只用判断 \(l-1,l,l+1,r-1,r,r+1\) 单调性的变化所减少/增加的贡献。( \(easy\) 就不写了)

CF1420D Rescue Nibel!

找每个时间关灯和开灯的数量,先减这个时间关灯的数量,然后用组合数计算,后加这个时间开灯的数量。

2020.9.27

CF849B Tell Your World

大题解

CF237C Primes on Interval

用的 \(O(n)\) 做法。因为找包含 \(k\) 个质数的最小区间长度不好找,选择找包含 \(k-1\) 个质数的最小区间长度,方法是 \(O(n)\) 扫一遍即可。

CF706C Hard problem

因为前面和后面的字符串是独立的,所以直接记录反转和不反转是否满足条件,然后 \(DP\) 就好了

CF1340D Nastya and Time Machine

这个需要看别人的,自己能力不够

CF1102C Doors Breaking and Repairing

水的我无法接受。唯一需要注意的就是因为对手可以修门,所以当 \(x\leq y\) 时,只能破坏防御值 \(\leq x\)\(\frac12+1\)

(艸,今天刚刚知道 \(ceil\) 返回的不是整型,是 \(float\) ,然后™锅了三次)

2020.9.28

CF1417B Two Arrays

大题解

CF1417A Copy-paste

大题解

P2986 [USACO10MAR]Great Cow Gathering G

简单的树形DP。第一种 \(dfs\) 算出每个节点的子树到节点的距离,用 \(dis_1\) 来搞第二种 \(dfs\) ,如果不是以 \(1\) 为根,往下移,会转移 \(f_v=f_u+(sum-siz_v)*dist_{u,v}-siz_v*dist_{u,v}\)

CF340D Bubble Sort Graph

因为是逆序对连边,那么如果后面比前面大就没有边了,可以想到最大独立集就是后面一直比前面大,也就是求最长上升子序列。注意:本题 \(2\leq n\leq 10^5\) ,所以不能用 \(O(n^2)\) ,要用 \(O(n\log n)\)

CF402E Strictly Positive Matrix

如果 \(k\) 次之后矩阵是正的,需要每两个点都是联通的,不然会有一个位置的点还是 \(0\) 。那么我们可以将矩阵看作一个邻接矩阵,然后连边。若原图只有一个 \(scc\) ,那么满足。

CF85E Guard Towers

通过最大值最小,可以判断是二分答案。二分距离,然后大于当前 \(len\) 的分在不同组,用黑白染色。

方案数更显然,每个连通块有两组,可以互相交换,所以 \(ans=2^{cnt}\)\(cnt\) 为连通块块数。

P3031 [USACO11NOV]Above the Median G

看到中位数想到将大于它的变 \(1\) ,小于的为 \(-1\) 。然后前缀和,满足条件的为 \(sum_j-sum_{i-1}\geq0\)\(sum_j\geq sum_{i-1}\) ,求解即可。

2020.9.29

P1269 信号放大器

树形DP。从叶子开始,大于 \(cost\)\(ans++\) ,记录子树到根的最长距离,转移方程是: \(dis_u=\max_{v\in son_u}(dis_v+e_{u,v})\)

CF743C Vladik and fractions

\(\frac 2n=\frac 1n+\frac 1{n+1}+\frac 1{n(n+1)}\) ,当 \(n=1\) 时, \(\frac 12+\frac 13+1\leq2\) ,特判 \(-1\)

CF359B Permutation

令前一项等于后一项加 \(+1\) ,则 \(n-n=0\) ,因为交换一项前面式子不变,后面 \(-2\) ,交换 \(k\) 次即可。

CF468C Hack it!

大题解

2020.9.30

CF512E Fox And Polygon

考虑中间状态。将初始转化为所有点连向1,然后将连向1的转化到最终态。枚举每个点,找到两边连向1的就行。

CF566E Restoring Map

瞎鸡搞。不好写

2020.10.1

P3750 [六省联考2017]分手是祝愿

可以从大到小扫一遍,找到必须按的键,数量记为 \(cnt\)

可以推出状态转移方程: \(f_i=\dfrac in+\dfrac{n-i}n\times(f_i+f_{i+1}+1)\Rightarrow f_i=\dfrac {n+(n-i)\times f_{i+1}}i\) ,比大小。

如果 \(cnt<k\) ,输出 \(cnt\) ,不然输出 \(f_{cnt}+f_{cnt+1}+\cdots+f_{k+1}\)

CF1108D Diverse Garland

先消3个的,再消2个的。

CF279B Books

大题解

CF27E Number With The Given Amount Of Divisors

爆搜。细节:怕爆 \(long~long\) ,可以选择 \(double\)

POJ2356 Find a multiple

选择构造,记录前缀和。由抽屉原理可得,这 \(n+1\) 个前缀和必有2个 \(\%n\) 意义下的相等。

P2568 GCD

相当于找 \(\gcd(i,j)=1\) 的,然后 \(\gcd(i*p,j*p)=p\) 。所以记录 \(sum\varphi\) 就行了。

2020.10.2

没做题,但是 \(trump\) 得了新冠,开心

2020.10.3

P3645 [APIO2015]雅加达的摩天楼

bfs。拿 \(bitset\) 判重,因为 \(j\leq \sqrt n\) 时,只有 \(n\sqrt n\) 个状态; \(j>\sqrt n\) 时,只有 \(m\sqrt n\) 个状态,时间复杂度为 \(O((n+m)\sqrt n)\)

2020.10.4

P3203 [HNOI2010]弹飞绵羊

P2801 教主的魔法

分块入门,类似的可以看LOJ的分块入门2

CF1036D Vasya and Arrays

无解就是 \(\sum A\not=\sum B\) ,然后别的就模拟过程。

P2455 [SDOI2006]线性方程组

高斯消元板子。注意判断无解和无穷解的情况。

P4035 [JSOI2008]球形空间产生器

由题目给的条件可以得到对每个 \(i\) ,都有 \(\sum\limits_{j=1}^n(a_{i,j}-x_j)^2=C\) ,用 \(i+1\) 减去 \(i\) ,可以得到 \(2\sum(a_{i,j}-a_{i+1,j})x_j=\sum(a_{i,j}^2-a_{i+1,j}^2)\) ,总共有 \(n\) 个式子,那么可以用高斯消元来解决。

2020.10.5

CF1358E Are You Fired?

显然需要分类讨论,当 \(x\geq 0\) 时,如果 \(sum_n>0\) 那么直接输出 \(n\) ,否则输出 \(0\) ,当 \(x<0\) 时,枚举以 \(1-\frac {n+1}2\) 开头的区间的最右端点,判断是否大于 \(\frac n2\)

LOJ 2980「THUSCH 2017」大魔法师

用矩阵来写线段树,没了。

CF847D Dog Show

枚举最后停的位置,然后模拟过程即可。

BZOJ4765 普通计算姬

将树上的点按编号分块,然后考虑每个点对每个块的贡献,用 \(dfs\) 序+树状数组维护子树大小,单点改的时候暴力修改即可,查询整块直接查,零散暴力。

CF995D Game

大题解。

2020.10.6

CF1424G Years

大题解

CF1423K Lonely Numbers

大题解

P1451 求细胞数量

bfs寻找连通块

P6850 NOI

\(ans=a+b+c+d+e+f+g+h\times5+50\) ,判断 \(ans\)\(i\) 的关系

CF1270D Strange Device

大题解

CF238E Meeting Her

大题解

CF1423B Valuable Paper

找最小,所以要先二分,然后显然二分图的完美匹配,拿最大流跑就没了。

CF238A Not Wool Sequences

大题解

CF238B Boring Partition

大题解

CF1166E The LCMs Must be Large

结论题。它给出的限制集合如果互相有交集,那么有解,如果没有,那么无解。

2020.10.7

P1486 [NOI2004]郁闷的出纳员

看着像Splay板子,实际上就是板子。

CF780F Axel and Marston in Bitland

大题解

CF896E Welcome home, Chtholly

第二分块板子。

CF1180B Nick and Array

发现 \(a_i=-(-a_i-1)-1\) ,即反转两次等于不变,所以将所有大于零的都反转,要是 \(n\) 为奇数,就将最小的反转回来。

2020.10.8

P3398 仓鼠找sugar

发现要是相交, \(a\)\(b\) 或者 \(c\)\(d\)\(lca\) 必在另一个的路径上,然后用 \(dep\) 求一下就好了。

CF403D Beautiful Pairs of Numbers

大题解

CF285E Positions in Permutations

大题解

2020.10.9

P6551 [COCI2010-2011#2] CRNI/SP7884 C2CRNI - Crni/P5230 [AHOI2013]好方的蛇

记录左上角右下角左下角右上角的黑矩阵数量,拿前缀和维护。以 \((i,j)\) 为例, \(f_{i,j}=f_{i,k_i}+1+h_{i,j}*(k_i-j)-1\) ,其中 \(h_i\)\(i\) 这列左边最低点。然后乱搞就行了。

CF433E Tachibana Kanade's Tofu

很套路的AC自动机上数位DP。

CF280C Game on Tree

因为当某个点的祖先被染色时,它自己也黑了,所以期望为 \(\frac {1}{dep_i}\) 。又由期望的线性性, \(ans=\sum\limits_{i=1}^nd\frac 1{dep_i}\)

CF235D Graph Game

先考虑树的情况,可以解出对于一个点 \(u\) 为分治中心,对于每一个点 \(v\)\(p=\frac 1{dis_{u,v}}\)

再考虑基环树,发现和树差不多,如果经过环,概率为 \(p=\frac 1{x+y}+\frac 1{x+z}-\frac 1{x+y+z}\)

P3523 [POI2011]DYN-Dynamite

显然的二分+换根DP。及时判断即可。

P3457 [POI2007]POW-The Flood

并查集维护。低点抽水机总比高的好,然后按高度排序,记得判断城市和是否联通。

2020.10.10

P3489 [POI2009]WIE-Hexer

最短路+状压。

P5007 DDOSvoid 的疑惑

树形DP。设 \(g_i\)\(i\) 这颗子树中的方案数, \(f_i\) 为这颗子树中的价值。可以得到方程 \(f_u=f_v*(g_u+1)+f_u*(g_v+1),g_u=g_u+g_v*(g_u+1)\) 。记得模数为 \(10^8+7\)

CF1045D Interstellar battle

考虑贡献,不修改的时候,设一个节点只与它父亲是否消失有关,这样贡献不会重复。然后从根开始树形DP。当修改的时候,再记录一个节点的儿子的值 \(sum\) ,只改变被修改节点的 \(sum\) 即可。

P3154 [CQOI2009]循环赛

记忆化搜索。有优化剪枝:

image-20201011202530776

2020.10.11

P2158 [SDOI2008]仪仗队

可以转化为求 \(\sum\limits_{i=1}^n\sum\limits_{j=1}^n[(i,j)=1]\),先考虑纵坐标比横坐标小的情况: \(\sum\limits_{i=1}^n\sum\limits_{j=1}^i[(i,j)=1]=\sum\limits_{i=1}^n\varphi(i)\) ,发现相反的情况答案是一样,但是 \((1,1)\) 被算重了,所以 \(ans=(\sum\limits_{i=1}^n\varphi(i))\times2-1\)

P2398 GCD SUM

\(\sum\limits_{i=1}^n\sum\limits_{j=1}^n(i,j)=\sum\limits_{d=1}^nd\times\sum\limits_{i=1}^n\sum\limits_{j=1}^n[(i,j)=d]=\sum\limits_{d=1}^nd\times\sum\limits_{i=1}^{\lfloor\frac nd\rfloor}\sum\limits_{j=1}^{\lfloor\frac nd\rfloor}[(i,j)=1]\)

P3622 [APIO2007]动物园

因为有护栏,不难想到状压DP。但是 \(0\leq n\leq 10^4\) ,用不了状压。发现每个小朋友的护栏数为 \(5\) ,可以DP。设 \(f_{i,j}\)\(i\) 位置下 \(j\) 状态的最大值,转移方程为 \(f_{i,s}=\max(f_{i-1,(s\&15)<<1},f_{i-1,(s\&15)<<1|1})+num_{i,s}\) 。意思是从上一个位置的前四位护栏转移到这一位, \(num_{i,s}\) 为当前这一状态能满足的最多小朋友数,预处理出来即可。

2020.10.12

P4397 [JLOI2014]聪明的燕姿

可以通过约数和定理得: \(ans=\prod\limits_{i=1}^k\sum\limits_{j=0}^{c_i}p_i^{j}\) ,所以只要求出 \(c_i\)\(p_i\) 就行了。考虑搜索,设 \(n\) 为剩下的数, \(s\) 为要求的数被找来的部分, \(now\) 为第几个素数。在 \(now=1\)\(now\) 能表示为 \(p_i^1+p_i^0\) 其中 \(x<i\) 的时候记录答案。

P4303 [AHOI2006]基因匹配

求LCS,想到DP。设 \(f_{i,j}\)\(a\) 序列匹配到 \(i\)\(b\) 序列匹配到 \(j\) 时的最大匹配,则状态转移方程为 \(f_{i,j}=\max\{f_{i,j-1},f_{i-1,j},f_{i-1,j-1}+[a_i=b_j]\}\) ,因为这个是 \(O(n^2)\) 的,考虑优化,可以像背包倒序转移,这是空间优化。因为转移总的来说只和 \(a_i=b_j\) 有关,可以拿空间优化后的二维树状数组记录 \((i,j)\) ,及时转移。

CF264A Escape from Stones

大题解

CF264B Good Sequences

大题解

CF785D Anton and School - 2

大题解

CF264C Choosing Balls

大题解

CF264D Colorful Stones

可以画出一个网格图,然后确定可达状态,判断其中的不可达状态,都是形似 \(AB\)\(BA\) 的,然后记录前缀和。发现可达状态的左端点和右端点都是单调不降的,然后再扫一遍记录答案就行。

2020.10.13

CF757E Bash Plays with Functions

大题解。

P4056 [JSOI2009]火星藏宝图

有朴素DP,记录 \(pos_i\)\(i\) 这列的最低点,再 \(sort\) 一遍之后就能保证扫描的时候是单调过的,瞎🐓转移,方程是 \(f_i=f_j-(x_i-x_j)^2-(y_i-y_j)^2\)

还有更nb的斜率优化DP,设 \(f_{i,j}\) 为走到 \((i,j)\) 上的点的最大收益,因为 \(pos\) 所以确定列就确定了行,可以省略第一维,记 \(x\) 为当前行数, \(i\) 为当前列: \(dis_j=(x-pos_j)^2,f_i=f_j-dis_j-(i-j)^2+w_{x,i}\)

\(j<k\)\(k\) 转移比 \(j\) 优,有: \(f_j-dis_j+2i\times j-j^2<f_k-dis_k+2i\times k-k^2\Rightarrow \dfrac {f_j-f_k-dis_j+dis_k-j^2+k^2}{2(k-j)}<i\)

CF1032F Vasya and Maximum Matching

有一个结论是一个树的最大匹配唯一当且仅当除了孤点这颗树的其他连通块内部是完美匹配。

然后设 \(f_{u,0}\) 为孤点, \(f_{u,1}\) 为不是孤点但没匹配, \(f_{u,2}\) 为不是孤点且匹配。

方程:\(f_{u,0}=f_{u,0}\times(f_{v,0}+f_v,2),\\f_{u,1}=f_{u,0}\times f_{v,2}+f_{u,1}\times (f_{v,0}+f_{v,2}\times 2),\\f_{u,2}=f_{u,0}\times (f_{v,0}+f_{v,1})+f_{u,1}\times(f_{v,0}+f_{v,1})+f_{u,2}\times (f_{v,0}+f_{v,2}\times2)\)

CF1032D Barcelonian Distance

计算几何垃圾好题。

CF314B Sereja and Periods

大题解

CF76F Tourist

大题解

2020.10.14

CF455D Serega and Fun

大题解

CF507C Guess Your Way Out!

高度往下走,判断现在方向子树是否包含目标,不包含就把这颗子树的节点全部加上,然后反方向往下。包含就直接往下。

CF1098D Eels

大题解

CF662C Binary Table

因为 \(n\leq 20\) ,考虑状压。设 \(dp_{i,j}\)

这个专题就结束了〒▽〒

posted @ 2020-09-26 09:29  jasony_sam  阅读(201)  评论(0编辑  收藏  举报