ABC317E-Avoid-Eye-Contact题解
题意一个地图,其中有一些守卫,他们的视线是一个直线,直到碰到障碍物,现在主角在 $\left(qx,qy\right)$,在地图上是 S,现在要去终点 $\left(zx,zy\right)$,不能出现在守卫视线中,问能否到达,若能,输出最小花费,若不能,输出 $-1$。
思路首先处理一下守卫的问题,每找到一个守卫就将他视线内的直线变成 #,然后朴素 bfs,没什么好讲的,但是要注意,守卫的视线只能在 . 的方格内穿过,遇到其他方格会被挡住。
代码12345678910111213141516171819202122232425262728293031323334353637383940414
ABC317D-President题解
题意给定 $n$ 个区,每个区的价值为 $z_i$ ,现在有两个人竞争,我们想让第一个人赢,现在每个人每个区的支持人数分别为 $u,v$ ,哪方支持人数多,那么他就能获得这个区的价值,最后如果要使的第一个人获得的价值大于的二个人获得的价值,需要至少让多少人更改支持方。
思路相当于就是说要选一些区的人改票,这能让我们想到背包DP,第一个人需要改票的人数为 $w_i$,显然 $w_i=\frac{u+v+1}{2}-u$,这相当于是背包容量,$z_i$ 即是背包物品价值。
转移方程如下:
dp[j]=min(dp[j-z[i]]+w[i],dp[j])代码12345678910111213141
ABC317C-Remembering-the-Days题解
题意给定一个图,求其中任意两点之间距离的最大值,不能重复访问(类似于最长路(也许))。
思路由于我赛时的时候脑子抽了不知道咋写,差点挂,最后写成了状压DP,设 $dp[i][S]$ 表示通过了集合 $S$ 的点,最后在 $i$ 点的最长路径。
那么转移方程可得:
dp_{v,S\operatorname{xor} (2^v)}\gets\ \max\left\{dp_{u,s}+cost\right\}代码1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515
ABC315E-Prerequisites题解
题意给定你 $n$ 本书,在读第 $i$ 本书的时候,必须先读完若干本书(怎么看着像拓扑排序),现在要求想读第 $1$ 本书之前,要先按顺序读完哪些书?
思路很显然,若读完第 $1$ 本书之前要先读完 $a_1,a_2,…..a_n$,那么又考虑子部分,即读 $a_1,a_2….a_n$ 又先需要读完哪些书。
显然可以用 dfs 搞定,深搜读当前书要先读哪些书,返回的时候加入 $ans$ 数组记录,并用 $vis$ 数组标记,最后输出 $ans$ 即可。
代码12345678910111213141516171819202122232425262728293031323334353637383
欧拉函数
欧拉函数定义欧拉函数(Euler’s totient function),即 $\varphi(n)$,表示的是小于等于 $n$ 的数中与 $n$ 互质的数字个数,
例如 $\varphi(1)=1$。
性质$\bullet 1.$ 欧拉函数是积性函数。
$\ \ $ 积性函数的意思是:如果有 $\gcd(a,b)=1$,那么则有 $\varphi(a)=\varphi(a) \times \varphi(b)$。
$\ \ $ 特别的,当 $n$ 为奇数时,$\varphi(2n)=\varphi(n)$。
$\bullet 2.$ 当 $n$ 为质数时,有 $\varphi(n)=n-1$
ABC314C-Rotate-Colored-Subsequence题解
题意(说真的看样例都比题面好懂):给定一个长度为 $n$ 的字符串 $s$,以及一个类似于并查集的 $fa$ 数组的一个长度为 $m$ 序列 $a$ ,这可以近似的将 $a$ 数组理解为:若 $a_i=a_j$ ,则 $s_i$ 与 $s_j$ 属于一个集合(我自己的理解),现在,将为同一个集合中的 $s_i,s_j,…..,s_p,s_k$ 变为 $s_k,s_i,s_j,……,s_p$,这相当于将整个集合位移一下。
求最后的字符串。
新奇而奇怪的思路看到这道题我第一时间想到的居然是图论(不知道正解是不是),很显然,如果是同一个集合中的字符,则相当于这些字符连通,且是一个边数正好为集合大小的
ABC312C-Approximate-Equalization-2题解
题意有一个长度为 $n$ 的序列 $a$,每次可以对其中一个数 $+1$,另一个数 $-1$,求最少要多少次操作使得所有数之间的差小于等于 $1$。
思路因为我们要求所有数差值相等或者相差小于等于 $1$,所以设 $sum$为 $\sum\limits_{i=1}^{n}a_i$,但是可能会有余数的原因,所以有一些数为 $\lfloor\frac{sum}{n}\rfloor$,有一些为 $\lceil\frac{sum}{n}\rceil$。不妨设 $x$ 为前者,$y$ 为后者。
因为 $x \le y$,所以我们只需要使所有大于 $y$ 的数变成 $y$,所有小于 $x$ 的数变成 $x
ABC312C-Invisible-Hand题解
题意有一些卖家,每个人愿意用大于等于 $a_i$ 的价格出售苹果。
还有一些买家,每个人愿意用小于等于 $b_i$ 的价格购买苹果。
现在要求你给定苹果的价格,满足愿意出售的人大于等于愿意购买的人的情况下,苹果的价钱尽量小。
思路很显然的一道二分答案,由于我们不需要考虑人选的方案,只需考虑有多少人愿意卖或买,所以可以直接对 $a$ 数组和 $b$ 数组进行排序。
而后二分答案,每次用 $mid$ 在 $a$ 和 $b$ 数组中记录出有多少人,由于数组已经排序,所以这个可以使用 lower_bound 和 upper_bound 函数去查找有多少人在苹果价钱为 $mid$ 的情况下愿意买或卖。
ABC314D-LOWER题解
题意:给定一个长度为 $n$ 的字符串,有 $m$ 次操作,每次操作给定两个整数 $t$ 和 $x$,以及一个字符 $c$,满足以下操作:
$\hspace{1em}\bullet$ 若 $t$ 为 $1$,则将字符串中的第 $x$ 个字符更改为 $c$
$\hspace{1em}\bullet$ 若 $t$ 为 $2$,则将字符串中的所有大写字母变为小写字母
$\hspace{1em}\bullet$ 若 $t$ 为 $3$,则将字符串中的所有小写字母变为大写字母
求最后的字符串
思路:针对操作 $1$,直接更改即可,但是由于这个操作可能会改变原有字符串的性质(全部是大写\全部是小写),所以