自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Oxide‘s Blog

之前的博客就不删了,留作纪念 (p≧w≦q)……可能会和 cnblogs 同步更新!

  • 博客(142)
  • 收藏
  • 关注

原创 我的博客地址

博客园洛谷

2020-05-03 09:22:54 272

原创 头文件 <cstdarg> 的使用

头文件 的使用

2023-10-16 09:58:51 121

原创 P4240 毒瘤之神的考验

根号分治、莫比乌斯反演。

2022-07-13 11:35:01 147

原创 [学习笔记] 上下界网络流

上下界网络流。

2022-03-07 23:10:34 521

原创 斐波那契博弈

斐波那契博弈。

2022-02-25 12:04:34 413

原创 [学习笔记] 关于 LIS/LDS 的一些奇奇怪怪的东西~

关于 LIS/LDS 的一些奇奇怪怪的东西~

2021-11-16 23:23:13 369

原创 CodeForces - 1452D Radio Towers

Solution\text{Solution}Solution容易发现其实就是将长度为 nnn 的区间划分成若干奇数段的总方案数再除以 2n2^n2n。我们发现 0,n+10,n+10,n+1 不能收到信号其实就是将 [1,n][1,n][1,n] 阻断起来,很容易联想到 DP\text{DP}DP 的子状态:f[i]f[i]f[i] 表示 iii 个小镇的总方案数,那我们就有转移柿(枚举最后一段长度为 2×j+12\times j+12×j+1,f[0]=0f[0]=0f[0]=0):若 iii

2020-12-03 16:05:03 159

原创 CodeForces - 939F Cutlet

Description\text{Description}Description注意第 iii 分钟翻转是将现在朝下的一面煎这一分钟再翻。Solution\text{Solution}Solution朴素 DP\text{DP}DP:令 f[i][j]f[i][j]f[i][j] 为煎了 iii 分钟,现在朝上的一面一共煎了 jjj 分钟的最小翻转次数。则有(即翻与不翻):f[i][j]=min⁡(f[i−1][j],f[i−1][i−j]+1)f[i][j]=\min(f[i-1][j],f[

2020-08-13 16:06:54 207

原创 CodeForces - 319C Kalila and Dimna in the Logging Industry

Solution我们令 f[i]f[i]f[i] 为砍第 iii 棵的最小代价。有转移:f[i]=f[j]+a[i]×b[j](1≤j≤i−1)f[i]=f[j]+a[i]\times b[j](1\le j \le i-1)f[i]=f[j]+a[i]×b[j](1≤j≤i−1)我们考虑为什么这是对的。(因为实际上我们可以选择先砍后面的再砍前面的)首先我们证明不存在先砍 kkk,再砍 jjj 的情况(其中 k≠n,j<kk\ne n,j<kk​=n,j<k)。因为 b[n]=

2020-08-12 11:30:48 752

原创 CodeForces - 744C Hongcow Buys a Deck of Cards

Solution朴素思路 f[i][j]f[i][j]f[i][j] 表示取卡状态为 iii,用了 jjj 颗红宝石,最少用蓝宝石的数量。瞄一眼数据 1e71e71e7,完全不可做。。。可以反着思考,f[i][j]f[i][j]f[i][j] 表示取卡状态为 iii,省了 jjj 颗红宝石,最多省蓝宝石的数量。为什么可以反着来?首先注意到能省的红/蓝宝石数其实是很少的,红宝石最多省 ∑i=0n−1i=120\sum_{i=0}^{n-1}i=120∑i=0n−1​i=120。其次如果不省,需要的红/蓝

2020-08-11 09:00:51 183

原创 CodeForces - 1203F2 Complete the Projects (hard version)

Solution这题分成两个部分来做。b[i]≥0b[i]\geq0b[i]≥0。贪心。将 a[i]a[i]a[i] 从小到大排序,然后依次做工作,如果不行就算了。b[i]<0b[i] < 0b[i]<0。发现不能直接贪 (废话直接贪就不是 DP 了)。假设 iii 选完后能选 jjj,那么就有 a[i]+b[i]≥a[j]a[i]+b[i]\ge a[j]a[i]+b[i]≥a[j]。你可能会疑惑为什么这里是 a[i]a[i]a[i] 而不是 rrr 这种东西,其实如果

2020-08-10 15:26:45 155

原创 CodeForces - 342D Xenia and Dominoes

博主的 BiBi 时间感觉自己压行在向一种无法控制的方向发展。Solution先考虑不管 ‘O’ 该如何进行 DP\mathtt{DP}DP。竖着放的 Domino\mathtt{Domino}Domino 是比较好搞的,关键是解决横着的。令 f[i][j]f[i][j]f[i][j] 为到第 iii 列,之前的 Domino\mathtt{Domino}Domino 已经全部合法,本列需要 i+1i+1i+1 列来空位置的状态为 jjj(如 j=(101)2j=(101)_2j=(101)2​,

2020-08-09 16:02:32 233

原创 CodeForces - 922E Birds

Solution首先是常规写法:f[i][j]f[i][j]f[i][j] 表示走到第 iii 棵树,如今魔法值为 jjj 能召唤最多的小鸟数。但这面临两个问题:魔法值太大。还有一个魔法上限的限制无法操作,因为上限还和召唤鸟的个数有关。看到 ∑c[i]≤104\sum c[i]\le 10^4∑c[i]≤104,自然想到将其作为 DP\mathtt{DP}DP 的一个状态,其实更正确的思路是发现魔法值和上限都与小鸟数有关。考虑 f[i][j]f[i][j]f[i][j] 表示走到第 iii 棵

2020-08-08 20:04:22 209

原创 CodeForces - 1316E Team Building

Solution博主先开始想的是 f[i][j]f[i][j]f[i][j] 表示选到第 iii 个人,位置选择情况为 jjj 的最大力量(iii 如果选了位置也包含在里面)。然后把人按 aaa 值从大到小排个序,然后选到某个人进行比赛,如果那个人在当前能选的前 kkk 大之列,就抛弃他在前 kkk 大的地位,在后面找个能选的 k+1k+1k+1 大塞进去。但是这是错的,因为有可能这次最优选择到后面不会推出最优解。正解的预处理和我的一样~~(其实就是误打误撞)~~。只是枚举 iii 时是按照 aaa 值

2020-08-07 17:56:04 172

原创 CodeForces - 377C Captains Mode

博主的 BiBi 时间博主在外面浪了多天已经退化成原始人的智商了。Description感觉某谷题面漏掉了一些细节,英语辣鸡的博主看了好久。。。两个队伍都使用最优策略。pick\mathtt{pick}pick 与 ban\mathtt{ban}ban 的顺序严格按照题目输入的顺序。这不是废话?Solution感觉很多出题人都喜欢设置一些不会用到的限制/条件。。。对于这道题,misspick\mathtt{misspick}misspick 和 missban\mathtt{missba

2020-08-06 17:18:36 395 2

原创 CodeForces - 903F Clear The Matrix

博主的 BiBi 时间能想象博主勤勤恳恳修完锅,交上去直接 MLE\mathtt{MLE}MLE 的快乐?(为什么不直接用滚动数组是真的憨)然后勤勤恳恳改成从 000 开始。Solution我们把矩阵翻过来,改成 nnn 行 444 列。对于左上角在 iii 行的操作,最多只能影响到 i+3i+3i+3 行。所以就令 f[i][a][b][c][d]f[i][a][b][c][d]f[i][a][b][c][d] 为前 i−1i-1i−1 行为 ‘.’,iii 到 i+3i+3i+3 行状态分别为

2020-08-02 10:31:30 174

原创 CodeForces - 111C Petya and Spiders

博主的 BiBi 时间博主现在在高铁上辽,不过这次的座位玄学变成了卧铺 QwQ\mathtt{QwQ}QwQ。(幸好对面的漂酿小姐姐提醒有充电头,不然只有和黑屏的电脑相对无言,,,岂不美哉?)Solution具体肯定是状压某行,一眼望去发现 n,m≤40n,m \leq 40n,m≤40 觉得搞不动,但是仔细想想发现 n,mn,mn,m 交换对解题没有影响,又有 n∗m≤40n * m\leq 40n∗m≤40,可以得出 min⁡(n,m)≤6\min(n,m)\leq 6min(n,m)≤6,这就可

2020-08-01 16:28:48 173

原创 CodeForces - 734E Anton and Tree

博主的 BiBi 时间博主还有 1h+11min\mathtt{1h+11min}1h+11min 就ヾノ≧∀≦)o 放假啦!好鸡冻!!!然鹅博主这个小蒟蒻在假期还有作业,但是和平时比较假期作业显得极其划算。hihihihihihihi~Solution感觉这题非常巧。我们将同色的连通块缩成一个点,然后就有一个非常神奇的性质:ansansans 就是 ⌊新树的直径+12⌋\lfloor \frac{新树的直径+1}{2} \rfloor⌊2新树的直径+1​⌋。你可能觉得答案应该是 min⁡(黑点

2020-07-31 20:41:03 179

原创 CodeForces - 490F Treeland Tour

Solution解法一其实就是暴力求 LIS。只是记录一下 O(nlogn)O(nlogn)O(nlogn) 求 LIS 的算法。解法二博主太蒻,虽咕但下次一定。Code解法一#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int N = 6005;int n, w[N],

2020-07-30 12:02:36 177

原创 CodeForces - 486D Valid Sets

Solution枚举根为 max⁡\maxmax,这样既好判断 max⁡−min⁡<=d\max-\min<=dmax−min<=d 而且能保证同一种联通子图不被计算多次(另外要特判与根的权值相等的情况,只能放一个来 DP\mathtt{DP}DP)。然后考虑选不选子树大力 DP\mathtt{DP}DP 就行了。Code#include <cstdio>const int mod = 1e9 + 7, N = 2010;int n, d, w[N], head

2020-07-29 20:35:06 577

转载 【转】树的直径

树的直径 By TEoS

2020-07-29 20:20:52 110

转载 【转】计算几何总结

总结 by clover_hxy

2020-07-29 19:13:39 110

原创 CodeForces - 1101F Trucks and Cities

Solution直接枚举 mmm 显然是不现实的。不过我们发现,卡车的油箱大小和卡车依靠油箱走的最长的一段路是一次函数关系。而卡车依靠油箱走的最长的一段路是由卡车能将它的路程分为几段决定的。所以可以转化为 iii 到 jjj 分 kkk 段路,使得最长的一段路最短。朴素算法枚举 i,j,ki,j,ki,j,k 和最后一段路的开始 ttt,是 O(n4)O(n^4)O(n4):f[i][j]=min⁡t=1jmax⁡(f[i][t],dis(t,j))f[i][j]=\min_{t=1}^j \m

2020-07-29 17:15:46 178

原创 CodeForces - 838E Convex Countour

Solution因为是凸多边形,当连接两点时,相当于将序列划分为两段,段与段之间不能有连线。我们要求一顺到底,所以每次的连线,相当于将区间缩小,你会发现只能连区间的两个端点。这个 DP\mathtt{DP}DP 比较好想,我们令 f[i][j][0]f[i][j][0]f[i][j][0] 为 [i,j][i,j][i,j] 区间由 iii 开始的最长不自交路径,f[i][j][1]f[i][j][1]f[i][j][1] 为 [i,j][i,j][i,j] 区间由 jjj ​开始的最长不自交路径:

2020-07-29 09:06:44 120

原创 CodeForces - 1312E Array Shrinking

Solution先放一下自己的错误代码:#include <cstdio>#include <cstring>#include <iostream>using namespace std;const int N = 505;int n, a[N], dp[N][N];int read() { int x = 0, f = 1; char s; while((s = getchar()) > '9' || s < '0') if(s =

2020-07-28 09:19:41 189

原创 CodeForces - 788C The Great Mixing

Solution智商告吹。首先有个技巧:kkk 为 a[i]a[i]a[i] 的平均数时,每个 a[i]a[i]a[i] 减去一个 kkk,再查看能否等于 000。(这样能够避免统计 a[i]a[i]a[i] 的个数)然后大力 BFS\mathtt{BFS}BFS,每次都拓展一次,所以保证第一次是最优的。Code#include <queue>#include <cstdio>#include <cstring>using namespace std;

2020-07-28 08:18:35 239

原创 CodeForces - 453C Little Pony and Summer Sun Celebration

博主的 BiBi 时间小马宝莉。。。在博主的少年时代是博主即使不做作业也要看的动画片。然而,还是没有读对题。Description图可能有几个连通块。不能从每个连通块重新开始。Solution其实思路很新奇。把图化成树。如果儿子的奇偶性不对,就走到父亲再回来。父亲同理。对于根节点没有爸爸,可以通过最后是否停在根节点来改变奇偶性。关于根节点的选取,我们尽量选择 aaa 值为 111 的。因为可能只有一个 111,但是不与外界相连的情况。Code#include <cstdio

2020-07-27 21:56:26 155 1

原创 CodeForces - 590C Three States

博主的 BiBi 时间我真的好菜啊。。。感觉都是老套路了,还是不会。。。Solution枚举中介点。预处理出每个点与三个城市的最短距离(注意这里用优先队列存储,因为增添步数并不是顺次增加的)然后累加即可。注意特判为 ‘.’ 的情况:会被两个城市计算重复。Code#include <queue>#include <cstdio>#include <cstring>#include <iostream>using namespace std;

2020-07-27 08:12:44 163 2

原创 CodeForces - 626E Simple Skewness

Solution今天没有奇奇怪怪的版块了。。。首先,我们可以证明选偶数个一定是不优的。设 left,rightleft,rightleft,right 分别为选择数列的最中间的两个数, sumsumsum 为不包含 left,rightleft,rightleft,right 的选择数列的和,lenlenlen 为选择数列的长度。我们将数列向左平移,使 leftleftleft 到达 000。那么此时答案就是,ans1=sumlen−right2ans1=\frac{sum}{len}-\fra

2020-07-26 15:24:34 219 2

原创 How to use...MAP!!!

find(), count(), map[]一直没有搞清楚三者的区别。find():\mathtt{find():}find(): 如果不存在这个下标,返回值为 map.end()\mathtt{map.end()}map.end()。count():\mathtt{count():}count(): 如果存在这个下标,返回值为 111,否则为 000。map[]:\mathtt{map[]:}map[]: 如果存在这个下标,返回值为这个下标的值,否则为 000。敲黑板:map[]\mathtt{

2020-07-23 07:52:50 113

原创 CodeForces - 1369E DeadLee

Solution题面真的鬼畜。设 www 为菜品的数量,degdegdeg 为需求量。你会发现,当所有 w<degw < degw<deg 时是一定没有解的。为什么呢?可以思考我们臆想出来这种方案可以有解的思路:如果一个人只选了一种,就减小了其他菜品的负担。但是,虽然这种情况会发生,它仍不足以使其合法。可以这样想,假设某人选择某样菜,那么那样菜排队序列中那个人后面一定有人(即一定有人没选到)。这样是矛盾的,因为排队序列对于每个菜品都是相同的。我们可以先选择 w<degw &

2020-07-22 08:31:49 148

原创 CodeForces - 1358E Are You Fired?

Solution感觉自己写的有点丑。首先有一个很重要的结论:最后选取的 kkk 是大于等于 ⌈n2⌉\lceil \frac{n}{2} \rceil⌈2n​⌉ 的。原因是如果 kkk 满足条件,2∗k2*k2∗k 可以由两个长度为 kkk 的段凑出来。然后有个挺巧妙的思路:假设在 xxx 段之前的长度为 lll 即 n−⌊n2⌋n-\lfloor \frac{n}{2} \rfloorn−⌊2n​⌋。我们先以 lll 作为长度,预处理出数组 sum[i]sum[i]sum[i] 表示以 iii 为起

2020-07-21 11:15:19 165

原创 CodeForces - 351E Jeff and Permutation

Solution把 aaa 数组取绝对值。你会发现,产生逆序对的决定权在于数对中绝对值较大的数。我们比较一个数前面比它小的数个数,后面比它小的数的个数来决定是否取反(前面少就取反,后面少就不取)。关于相等的数,发现按上面的规律来取是保证没有逆序对产生的。Code#include <cmath>#include <cstdio>#include <iostream>using namespace std;const int N = 2005;int

2020-07-21 07:47:42 218

原创 CodeForces - 798D Mike and distribution

Solution我们可以分组。将 aaa 和 bbb 捆绑在一起,并把 aaa 从大到小排序。然后分奇偶讨论。nnn 为奇。必选第一个,然后再将后面两两分组,选择每组中最大的 bbb。nnn 为偶。必选第一和第二个,然后再将后面两两分组,选择每组中最大的 bbb。首先证明符合 aaa 的条件。如果第一组选的编号的 aaa 较小,可以用最大的 aaa 来比下去,然后对于后面的每个数,这个较小的 aaa 总是可以比下去。同时也符合 bbb 的条件。首先我们后面的分组保证了 bbb 是不小于的。那

2020-07-20 22:09:47 112

原创 CodeForces - 549G Happy Line

Solution听老师说是一道经典贪心。(当然我是不会的)你可以发现,对于每个数,它的值与它的下标之和是不变的。那么要保证单调不下降,一定要保证和是单调递增的。可以把它们加起来再排个序。那么不合法就只有两种情况:相邻两数新值相等。新值减去下标小于 000。Code#include <cstdio>#include <algorithm>using namespace std;const int N = 2e5 + 5;int n, a[N];int

2020-07-20 21:06:13 149

原创 CodeForces - 1276C Beautiful Rectangle

Solution主要是记录几个小技巧吧。首先我们发现 nnn 与 mmm 的值互换不影响结果。那么就有了第一个优化:令 nnn 为较小值,则 nnn 的范围就是 [1,N][1,\sqrt{N}][1,N​]。(NNN 就是题目给的 nnn)然后我们沿着对角线往下填。如果列数超过 mmm 就将列置为 111。可以发现这样填保证每种数最多填 nnn 个。我们将每种数的出现次数从小到大排序,可以 log⁡(N)\log(N)log(N) 维护每个 nnn 时最多能填的数。最后填数的环节有一个问题:直接

2020-07-20 20:58:47 153

原创 CodeForces - 1059D Nature Reserve

这道题有两种做法。首先可以知道有点在 xxx 轴异侧是不合法的。Solution 1二分枚举半径 rrr。半径定了之后,最终的圆心的纵坐标就定了。接下来考虑每个点,以每个点为圆心以 rrr 为半径交直线 y=ry=ry=r 于两点,这两点的区间就是圆心可取的区间。然后每个点的区间取一个交集就行了。但是因为 checkcheckcheck 函数时间太大好像不能直接过。(其实就是写的丑)Solution 2三分圆心的横坐标。大佬写得很清楚 链接。My Code#include <cmat

2020-07-16 16:33:38 136

原创 CodeForces - 1155E Guess the Root

博主的 BiBi 时间其实调这道题的时间也不多,也就一个晚上 + 中午半小时。。。看着大家快乐地切了这题,我真的有丝绝望。其实感觉昨天晚上没带脑子写题,一直在修锅。Solution其实这道题就是高斯消元的板子题,你询问 101010 个值,把关于 aaa 的式子列出来暴解就行了。Code#include <cmath>#include <cstdio>#include <iostream>using namespace std;typedef long

2020-07-16 15:15:55 180 2

原创 「快速莫比乌斯变换(FMT)与快速莫比乌斯反演(FMI)」

博主的 BiBi 时间这应该是本蒟蒻的第一篇学习笔记吧。定义与结论FMT定义f(S)=∑S′∈Sg(S′)f(S)=\sum_{S'\in S}g(S')f(S)=S′∈S∑​g(S′)FMI则有g(S)=∑S′∈S(−1)∣S∣−∣S′∣∗f(S′)g(S)=\sum_{S'\in S}(-1)^{|S|-|S'|}*f(S')g(S)=S′∈S∑​(−1)∣S∣−∣S′∣∗f(S′)证明不妨设 y∈x,z∈yy\in x,z\in yy∈x,z∈y,x,y,zx,y,zx,y,z 集

2020-06-13 22:14:41 262

原创 「WC 2018」州区划分

博主的 BiBi 时间感觉学到了几个卡常小技巧。(这题卡空间又卡时间可还行)话说在 usOJ\mathtt{usOJ}usOJ 上只有 50pts50pts50pts。(其他都可过)Solution我们令 f[S]f[S]f[S] 为总集合为 SSS 时的答案,g[S]g[S]g[S] 是 SSS 集合的 www 值之和的 ppp 次方。这里有一个在本蒟蒻眼中看起来并不显然的 DPDPDP:f[S]=1g[S]∗∑S′⊂Sf[S′]∗g[S−S′]f[S]=\frac{1}{g[S]}*\sum

2020-06-12 22:05:09 270 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除