不知不觉水了十几天的题目了,到开新文章的时候了。
回老家的时候可能做题也会少一点(也许不会),还要写作业+学习Linux+学习Vim。
不过也只能这样了233.

2.11

今天去打球看电影了,只水了四题,还有另外一题只有1个人AC的,我刚了3h+,写了一个正确的程序(也许吧),但是因为常数太大会TLE,以后慢慢改一下试试(现在因为不想掉正确率懒得改)。

BZOJ3705——String——Hash
其实本来想写马拉车的,不过好像没有必要。
把这个矩阵从四个角各哈希一遍对于每个点二分答案 验证时将四个哈希值全都取出来对比即可
然后只枚举i+ji+ji+j为偶数的点 得到的边长除以2就是以这个点为中心的正方形回文子矩阵数量

BZOJ3706——Map——Euler_Path
首先如果有某个点连出的黑边度为奇数,则无解,否则必然有解。
然后如果有解的话,ans=图中含有黑边的联通块数。
因为如果一个联通块内用两个反向刷变成全白,那么一定可以将这两个反向刷的路径合并。

BZOJ3707——Calc_Geometry——Area
那么枚举两个点,把它们作为y轴旋转坐标系,那么最小面积一定是x坐标绝对值最小的那个点。
考虑按枚举两个点的斜率排序,每次旋转后只有这两个点的横坐标相对位置会改变,然后统计答案。

看黄学长的博客如是说:
按照x坐标排序,将相邻的点分为一块,块内暴力。。
由于这样不够靠谱,所以我们随机旋转坐标系几十次就差不多了。

BZOJ3511——Map——Minimal_Cut
打BZOJ3708绝望以后,我们来水一题。一眼最小割。
考虑划为SSS集代表A" role="presentation">AAA国,划为TTT集代表B" role="presentation">BBB国
建图:SSS连每个点流量VA" role="presentation">VAVAVA,每个点连TTT流量VB" role="presentation">VBVBVB
对于每条边,两个端点点之间连双向边流量ECECEC
新建一个点XXX,S" role="presentation">SSS连XXX流量EA" role="presentation">EAEAEA,XXX连两个端点流量INF" role="presentation">INFINFINF
再新建一个点YYY,两个端点连Y" role="presentation">YYY流量INFINFINF,YYY连T" role="presentation">TTT流量EBEBEB
认为1号点VA=INF,VB=0VA=INF,VB=0VA=INF,VB=0
nnn号点VA=0,VB=INF" role="presentation">VA=0,VB=INFVA=0,VB=INFVA=0,VB=INF

(BZOJ3708下载了集训队的数据,本地测试飞快,正在向BZ要数据qwq)

2.12

早上起床发现lydsy给了3708的数据,打开一看发现数据是错的,心态崩了,再次联系lydsy,然而一直到晚上都没有回我qwq。今天水一下九月月赛,明天要回老家,又是7h的车程qwq。

BZOJ5043——DP——Common
从高位到低位考虑,设f[i][j]f[i][j]f[i][j]表示考虑到第iii位,第i" role="presentation">iii位之前部分的mmm还剩j" role="presentation">jjj时,最小的kkk是多少,因为当j>n" role="presentation">j>nj>nj>n 时必然无解,故只需要考虑不超过nnn的状态。

BZOJ5044——Others——Construct——Plane_Geometry
一道比较简单的构造题吧。
考虑初中知识,尝试用向量(3,4)来构造(包括它的翻折旋转)。(其实样例已经在暗示了)
然后我们发现当n>4" role="presentation">n>4n>4n>4时,都可以在(n−2)(n−2)(n-2)边形的基础上进行构造,然后就没有了。

BZOJ5045——Others——Scan_Lines
旋转坐标系,转化为若(x,y)(x,y)(x,y)以及(x,y+1)(x,y+1)(x,y +1)都有砖块,则(x+1,y)(x+1,y)(x+1,y)处可以放入一个砖块。
从下到上考虑每个xxx,那么若某个y" role="presentation">yyy右侧不存在y+1y+1y+1,则它不可以存在,用set维护所有存在的yyy,以及所有右侧为空的y" role="presentation">yyy,这些yyy在x+1" role="presentation">x+1x+1x+1处要被删除。

BZOJ5046——DP——Game_Theory
首先有一个很显然的结论:这个游戏不关心能量的多少,只关心能量的差值。
然后观察到题目中特意强调了美味值和不大,考虑用这个dp。设s[i]s[i]s[i]表示iii到n" role="presentation">nnn这些糖果美味度的总和。
令f[i][j]f[i][j]f[i][j]表示考虑iii到n" role="presentation">nnn这些糖果形成的子游戏,先手希望拿到至少jjj点美味度时,先手与后手的能量差值最少是多少。
若先手决定拿走第i" role="presentation">iii个糖果,那么后手能拿走的美味度总和不超过s[i]−js[i]−js[i]-j,即要保证后手拿不到s[i]−j+1s[i]−j+1s[i]-j+1,故f[i][j]=−f[i+1][s[i]−j+1]−r[i]+1f[i][j]=−f[i+1][s[i]−j+1]−r[i]+1f[i][j]=-f[i+1][s[i]-j+1]-r[i]+1。
若先手决定让后手拿第iii个糖果,那么至少比后手多1点能量,且可以在未来拿到j" role="presentation">jjj点美 味度,故f[i][j]=max(1,f[i+1][j]+r[i]+1)f[i][j]=max(1,f[i+1][j]+r[i]+1)f[i][j]=max(1,f[i+1][j]+r[i]+1)。
最后先手的总美味度即为最大的kkk,满足f[1][k]≥A−B" role="presentation">f[1][k]≥A−Bf[1][k]≥A−Bf[1][k] \geq A-B。

BZOJ5047——Map——Shortest_Way——Dijkstra
对于固定的终点来说,依然是越早到越好。
预处理出模ccc意义下每种取值的最佳等待时间,然后建图求最短路即可。

BZOJ5048——Map——Union_Find_Sets
观察到塌陷的地方比较少,于是我们将奶牛的运动转化为塌陷的运动。
维护四个方向的并查集,将障碍扫过路径上的奶牛删掉即可。

看看明天车上能不能水完九月月赛吧qwq 。(可能会没有位置给我放电脑呢,这样我就要手机码了。)

2.13

恩,酒店的网速还可以,就是有点不稳定。
白天在老家房子的话是没有wifi的qwq,所以这几天写题会很少,不过相对的质量也会更高吧。(大概率不会)

BZOJ5049——Map——Meet_In_The_Middle
题目又是特意提醒了数据随机,那么这样就好办了。
随机的话大概一个点平均连5条边,可以yy一下最短路的距离也不会太长,大概是8左右吧。
这样用MEET_IN_THE_MIDDLE,从S" role="presentation">SSS和TTT各往下搜4层。
如果没有碰到的话就BFS整张图,这样的情况不会太多。

BZOJ5050——Data_Structure——Segment_Tree(ODT)
怎么说呢,数据随机,那就可以乱搞了。
根据以往经验,这样的题一般都是可以暴力维护一些东西的。
其实我们维护一下最小深度差,深度差以内的就直接加,超过重构就行了。
线段树做。(其实这种暴力的貌似都叫ODT?老司机树233)

BZOJ5051——DP——Compression
无视同一行/同一列的两个格子的位置关系,只需要在它们不相同时将方案数乘2,
如此一来只关心每一行/每一列有多少格子没满足,这只有0,1,2 三种情况。
设f[i][j][S][k]" role="presentation">f[i][j][S][k]f[i][j][S][k]f[i][j][S][k] 表示考虑到(i,j)(i,j)(i,j),每一列剩余情况为SSS,第i" role="presentation">iii行还有kkk个格子需要填充时的方案数,然后逐格转移即可。
时间复杂度O(n3n)" role="presentation">O(n3n)O(n3n)O(n3^n)。

这样的话BZOJ的2017九月月赛就水完了呢,这几天都是做套题会比较好吧。
还要抽时间写作业啊。
lydsy还是没有回答3708数据问题!!!!!

2.14

今天lydsy终于回了数据问题,然而说有空再改,WTF

BZOJ3827——DP——Common
神奇的dp。
首先断环成链,计算前缀和。
然后计算每一个点作为该区间结尾端点时的cntcntcnt值和lastlastlast值,cntcntcnt值记录区间[last[i],i][last[i],i][last[i],i]完成分割的分割数。
当我们枚举一个点,显然要贪心取最长,所以有:sum[i]−sum[j]≤dsum[i]−sum[j]≤dsum[i]-sum[j]\leq d
转移:cnt[i]=cnt[j]+1,last[i]=last[j]cnt[i]=cnt[j]+1,last[i]=last[j]cnt[i]=cnt[j]+1,last[i]=last[j]
当i−last[i]≥ni−last[i]≥ni-last[i]\geq n,输出cnt[i]cnt[i]cnt[i]
24MB内存我**

BZOJ3828——Others——Miscellaneous
首先先O(n)O(n)O(n)扫出以所有点为相遇点,想走出符合条件的这个路径的话,左端点最靠右是多少,以及右端点最靠左是多少
这样对于从左到右的所有相遇点,他们的左端点和右端点都是单调的
所以我们可以利用这个性质,O(n)O(n)O(n)扫出对于每个相遇点的左端点和右端点外,是否有颜色相同的点,如果有,则可以把他们当做起始点,如果没有,则这个点不能当做相遇点..

BZOJ3829——DP——Greed
啊,一看就是树形dp什么的。
对每个节点记录两个值,一个是从这个节点下去遍历所有子节点之后再回来所需要花费的时间,另一个是假设从0时刻开始到达这个点并接下来遍历这个子树,安装完成的时间的最大值最小是多少
然后转移时我们可以贪心得排一个序,然后按顺序走完这些子树,直接算出父节点的值
不妨设titit_i为从iii开始遍历一圈回来的时间,bi" role="presentation">bibib_i为这颗子树最大值的最小值
然后子树iii排在j" role="presentation">jjj前面当且仅当max(1+bi,3+ti+bj)<max(1+bj,3+tj+bi)max(1+bi,3+ti+bj)<max(1+bj,3+tj+bi)max(1+b_i,3+t_i+b_j)

BZOJ3830——DP——Parallelogram
首先这些车肯定是分批的,然后我们就可以dp了。
令f[i]f[i]f[i]表示前iii辆车全部回来的最少时间,那么有:

f[i]=max(f[j]+i−j−1,A[i])+2⋅s+i−j−1" role="presentation">f[i]=max(f[j]+i−j−1,A[i])+2⋅s+i−j−1f[i]=max(f[j]+i−j−1,A[i])+2⋅s+i−j−1

f[i]=max(f[j]+i-j-1,A[i])+2\cdot s+i-j-1
然后fff数组显然是单调递增的,所以f[j]+i−j−1" role="presentation">f[j]+i−j−1f[j]+i−j−1f[j]+i-j-1也是单调递增的,就分段得到f[i]f[i]f[i]

{f[j]+i−j−1+2⋅s+i−j−1,A[i]+2⋅s+i−j−1,f[j]+i−j−1>A[i]f[j]+i−j−1<=A[i]{f[j]+i−j−1+2⋅s+i−j−1,f[j]+i−j−1>A[i]A[i]+2⋅s+i−j−1,f[j]+i−j−1<=A[i]

\begin{cases} f[j]+i-j-1+2\cdot s+i-j-1,& f[j]+i-j-1>A[i]\\ A[i]+2\cdot s+i-j-1, & f[j]+i-j-1

对于下面那部分,要使jjj最大,可以直接在f" role="presentation">fff数组里面二分,然后上面那部分就是求一个[j,i)[j,i)[j,i)的minminmin,可以数据结构维护。
但实际上上面的部分有决策单调性qwq,然后决策点单调前移,所以就可以O(n)O(n)O(n)了

BZOJ3831——DP——Monotonous——Queue
这个…单调队列优化dp就没了。

今天写了这么多dp,晚上CF的dp还没写出来,太惭愧了啊。

2.15

BZOJ3832——Map——Topsort
很好的利用了DAG的性质。题解

BZOJ3833——Divide_Conquer——Overall_Binary//——Data_Structure——Tree_In_Tree——Segment_Balance
坐标系的转化是要记住的一个点。
然后这道题很数据结构,又被我分治掉了qwq。题解

BZOJ3834——Divide_Conquer——Divide_Block——Common
首先枚举答案nnn,变成检验⌊A−1n⌋&lt;⌊Bn⌋以及⌊C−1n⌋&lt;⌊Dn⌋" role="presentation">⌊A−1n⌋<⌊Bn⌋以及⌊C−1n⌋<⌊Dn⌋⌊A−1n⌋<⌊Bn⌋以及⌊C−1n⌋<⌊Dn⌋\lfloor\frac{A-1}{n}\rfloor 有没有解
分块求解即可。

BZOJ3835——Others——Miscellaneous
没想到,膜题解。
首先,最优方案一定是先用i步拿完了前i层的点,然后再每次取k个,直到取完。
所以对于每一个kkk,相当于求max(i+⌈s[i]k⌉),1≤i≤maxdep" role="presentation">max(i+⌈s[i]k⌉),1≤i≤maxdepmax(i+⌈s[i]k⌉),1≤i≤maxdepmax(i+\lceil\frac{s[i]}{k}\rceil),1\leq i\leq maxdep
即⌈max(ki+s[i])k⌉,1≤i≤maxdep⌈max(ki+s[i])k⌉,1≤i≤maxdep\lceil \frac{max(ki+s[i])}{k}\rceil,1\leq i\leq maxdep
也就是说对于每一个kkk,只需要求出max(ki+s[i])" role="presentation">max(ki+s[i])max(ki+s[i])max(k_i+s[i])就好了。
我们可以把ix+s[i]ix+s[i]ix+s[i]当做一个一次函数,然后对于不同的iii形成的这些一次函数维护一个凸壳,然后把k" role="presentation">kkk排好序在上面扫一遍就可以求出最大值了

BZOJ3836——DP——Compression
对于每个点xxx,设S" role="presentation">SSS为三进制状态,SSS第i" role="presentation">iii位表示根到xxx路径上深度为i" role="presentation">iii的点的状态:
0:选了;1:没选,且没满足 ;2:没选,且已满足
设f[i][j]f[i][j]f[i][j]表示考虑根到xxx路径上深度为i" role="presentation">iii的点时这些点的状态为jjj时的最小费用,然后按DFS序进行DP即可。

我永远喜欢薇尔谢特!

2.16

BZOJ3521——Data_Structure——BIT
将题目的条件转化后我们可以得到:

∀k∈[L,R],sum[L−1]≤sum[k]≤sum[R]" role="presentation">∀k∈[L,R],sum[L−1]≤sum[k]≤sum[R]∀k∈[L,R],sum[L−1]≤sum[k]≤sum[R]

\forall k\in[L,R],sum[L-1]\leq sum[k]\leq sum[R]
处理出L[i]L[i]L[i]表示i左侧第一个大于sum[i]sum[i]sum[i]的的位置),R[i]R[i]R[i]类似。
然后问题就转化为MaximizeR−L+1MaximizeR−L+1Maximize R-L+1 同时L[R]≤L,R≤R[L]L[R]≤L,R≤R[L]L[R]\leq L,R\leq R[L]
对R[j]R[j]R[j]从小到大排序,依次把i≤R[j]i≤R[j]i\leq R[j]的i加入候选部分,然后再用BIT维护剩下的LLL数组,就可以解决了,复杂度O(nlogn)" role="presentation">O(nlogn)O(nlogn)O(nlogn)。
上面对于L,RL,RL,R数组的处理复杂度为O(nlogn)O(nlogn)O(nlogn),但是由于本题特殊的性质:前缀和连续变化,因此直接记录上一个值的位置就可以了,可以做到O(n)O(n)O(n)。

BZOJ3522——DP——Tree
由于可以O(n2)O(n2)O(n^2)搞,很容易想到枚举中间点(树根),然后用树形DP搞一搞。
这题比较简单,Claris在4543将nnn的范围增大到了10w,见下。

BZOJ4543——DP——Tree
没错,这题的指针转移十分妙,而且时间复杂度证明更妙!
其实上面不应该写见下,应该是见题解

BZOJ3523——Greed——Use_Data_Structure——Monotonous_Queue
感觉没什么好说的qwq。就是多的先放,一样多放end,放不了无解。堆维护一下。

BZOJ3524——Data_Structure——Persistent——Segment_Tree
一道主席树模板题。

BZOJ3526——Data_Structure——Segment_Tree
在线段树上存mi,mx" role="presentation">mi,mxmi,mxmi,mx分别表示表示该左端点取卡牌的两个值时,右端点的最小值,没有就是-1。
合并区间的话,判断右区间的左端点和左区间的值的大小即可。

BZOJ3872——Divide_Conquer——Binary_Search
显然从食蚁兽的边倒着推可以使问题更简单。
以这条边作为这棵树的“根”,开始遍历其他的边,
遍历到每条边的时候计算一下“到这条边时这群蚂蚁会被吃掉”的当时蚂蚁数量上限和下限。
然后对于每个叶子节点的那些边,二分一下有多少组蚂蚁会被吃掉就好了。

今天水了好多题qwq。把POI2014写剩下一题了,最后那题Snake是神题,大概是汉密尔顿回路,然后什么鬼dp,并不会。现在BZOJ上和POI上的solved都只有1。
开新番了qwq,但我永远喜欢薇尔谢特!

2.17

没什么特别想做的题,然后今天去看了电影所以时间比较少,索性做一下雅礼集训的题。

LOJ6029——Data_Structure——Segment_Tree
显然又是线段树的暴力(ODT)维护什么的。
区间除法其实就是区间减法,然后如果某一段减去的数字一样,显然可以一起打标记,否则暴力下放。
线段树记录的大概就是max和min之类的。

LOJ6030——Others——Construct——Miscellaneous
以下白0黑1。显然只有全白是无解的。对于每一列,只要有0,都需要被赋值至少一次。
考虑构造一个全1的行来进行赋值,可以枚举构造第iii行,设这行的零有x" role="presentation">xxx个。
此时如果第iii列有1,则构造出这个行需要x" role="presentation">xxx步,否则需要多花费一步给这一列放一个1。
所有步数取min即可,当然还有一些细节处理。

LOJ6031——String——SAM
神题,看题解,看完还是不会写。对着别人的程序写.gif。
构造SAM即可求出某个字符串在原串中匹配的次数,对kkk阈值

如果K≤sqrtn" role="presentation">K≤sqrtnK≤sqrtnK\leq sqrt n,即长度不大,暴力枚举区间即可,复杂度O(K2q)O(K2q)O(K^2 q)

如果K≥sqrtnK≥sqrtnK\geq sqrt n,那么每一个询问区间都是一个串前缀的后缀,这个可以倍增跳fail来做,复杂度为O(q(K+mlogK))O(q(K+mlogK))O(q(K+mlogK))

国家队今晚更新qwq

2.18

昨晚熬夜看了下一集,但是不能一次性看完真是很难受!!
今天做的是NWERC2015

BZOJ4425——Greed——Use_Data_Structure——Monotonous_Queue
把所有区间按照左端点从小到大排序,对于一个区间,选择结束时间最早的区间作为上一个,答案+1;如果不存在则新建一个。
优先队列维护一下即可。

BZOJ4426——DP——Parallelogram
如果一个区间包含另一个区间,那么这两个区间是否在一起的生产率是一样的。
将所有这种包含了其他区间的区间放入数组bbb,其余的放入数组c" role="presentation">ccc,有多个相同的时候则从bbb移一个到c" role="presentation">ccc。
那么ccc里所有区间左端点递增,右端点也递增,设f[i][j]" role="presentation">f[i][j]f[i][j]f[i][j]为ccc中前i" role="presentation">iii个区间划分成jjj组的最大收益,直接DP即可,决策具有单调性。
然后把p" role="presentation">ppp分配给bbb和c" role="presentation">ccc,求出bbb和c" role="presentation">ccc组合取来的最大收益即可。

BZOJ4427——Map——Bipartite_Graph_Matching
照题意建图,然后跑二分图匹配。细节特别多需要注意。

BZOJ4428——Search——DFS
方程f[i]=min{p∗j+f[⌈nj+1⌉]}+r(1≤j<n)f[i]=min{p∗j+f[⌈nj+1⌉]}+r(1≤j<n)f[i]=min\{p*j+f[\lceil \frac n {j+1}\rceil]\}+r (1\leq j
记忆化搜索即可通过。
我们考虑把nnn行分成j+1" role="presentation">j+1j+1j+1段,每段下面加一个printfprintfprintf,由于最后一个可以通过排除法得到,所以只加jjj个printf" role="presentation">printfprintfprintf,还有题目中说是最坏情况,所以把有问题的一段给最大的。
其实在枚举的时候有个小技巧,nj+1nj+1\frac n {j+1}取整在一段时间内只是会一样的,而jjj反而大了,这样的j" role="presentation">jjj明显不会更优,可以跳过。

BZOJ4429——Map——Bipartite_Graph_Matching
显然就是一个二分图匹配,没了。

BZOJ4430——Data_Structure——BIT
看第一眼:不就是个三维偏序,直接上CDQ,下一秒发现还是算了。
考虑不满足条件的数的性质,这一对数在其中两个排列里的位置关系是相同的,在另一个排列里的位置关系相反。
那么统计两两排列之间不满足偏序关系的数对的个数,这样统计下来每对数都被统计了两次,除以2就是不满足条件的对数。
树状数组求逆序对的简单过程qwq。

BZOJ4431——Calc_Geometry——Simulation
令人绝望的暴力计算几何题。
首先从大到小枚举答案,再答案!枚举方案,通过镜面对称终点得到路线,然后平方验证路线。

这最后五天会花多一点时间写作业,争取能做完,所以最后这几天一共就水一套月赛加两三道杂题好了,其实也没什么心情写题目了。

2.19

今天大部分精力用来写作业了,不过还是抽时间写了几个水题。
明天就要回家了,作业的压力好大。

BZOJ2818——Math——Phi
良心水题,筛出欧拉函数再求个前缀和就可以了。

BZOJ2819——Map——LCA
树链查询可以变成对某些点到根的查询的叠加,这样就只需要解决查询从根发出的树链即可。
如果我们询问的是从根到XXX节点树链上的值,那么只有X" role="presentation">XXX节点或XXX节点的祖先可能影响到X" role="presentation">XXX节点的答案。
也就是说,一个点修改以后,只会影响它为根的子树内的节点。
这样我们把这个节点所在的子树区间[l,r][l,r][l,r]修改一下即可。
查询的时候,如果查询的是XXX点,那么返回X节点所在DFS序中的那个位置的数即可。
这样我们可以用线段树就行了,BIT之类的数据结构也是可以的。

BZOJ2826——DP——Monotonous_Queue
令f[i][j]" role="presentation">f[i][j]f[i][j]f[i][j]表示第iii天持有j" role="presentation">jjj个污染物,那么答案一定是f[i][0]f[i][0]f[i][0]中的一个。
转移式:f[i][j]=max(f[i−t−1][k]−a[i]∗k+a[i]∗j)f[i][j]=max(f[i−t−1][k]−a[i]∗k+a[i]∗j)f[i][j]=max(f[i-t-1][k]-a[i]*k+a[i]*j)
用单调队列维护f[i−t−1][k]f[i−t−1][k]f[i-t-1][k],保证队头最大。队列中记录kkk。
当队头的k" role="presentation">kkk加上当天的最大买入值仍小于jjj时弹出队头。
队尾的值若小于当前的值则弹出队尾。

至此BZOJ的solved134,突然很想写到150solved,但是可能会不够时间写作业。纠结.gif

2.20

今天回家,身体不适很舒服,solved150还是算了吧,这几天每天写两题,把2017十二月月赛写完就算了。
今天写了两题暴力。

BZOJ5123——Search——Memory
设f[l][r]" role="presentation">f[l][r]f[l][r]f[l][r]表示根节点为[l,r][l,r][l,r]的线段树,匹配选择根节点的最大匹配&方案数,g[l][r]g[l][r]g[l][r]表示根节点为[l,r][l,r][l,r]
的线段树,匹配不选择根节点的最大匹配&方案数。那么这是一个很普通的树形dp。
注意到区间长度相等的线段树的结果是一样的,且每层至多有两种区间长度不同的区间,因此直接以区间长度为状态进行记忆化搜索即可。

BZOJ5130——Search——Minimum_Representation
爆搜字符串SSS的最小表示,然后通过KMP" role="presentation">KMPKMPKMP求出权值,再用组合数计算方案数即可。

2.21

BZOJ5122——Simulation——Common
这题好神经啊qwq,很巧妙,而且极易写错。
推公式得出终点坐标,然后倒着模拟r+cr+cr+c轮,一定可以填完整个矩形。

BZOJ5127——Others——Miscellaneous
一个区间合法当且仅当任意两个相邻的数差值不超过1,预处理出对于每个iii,最多能往右延伸到哪里即可。

BZOJ5128——DP——Interval
枚举长度len" role="presentation">lenlenlen,那么lenlenlen必须要是nnn的约数,然后枚举每个长度为len" role="presentation">lenlenlen的子串SSS,检查是否可行。
对于检查,设f[i,j]" role="presentation">f[i,j]f[i,j]f[i,j]表示区间[i,j][i,j][i,j]能否通过SSS产生,转移则是要么在末尾产生某个长度为len" role="presentation">lenlenlen倍数的区间,要么接着匹配一位(即S(j−i)mod|S|S(j−i)mod|S|S_{(j-i) mod|S|})。
区间dp,时间复杂度O(n3len)O(n3len)O(\frac {n^3} {len})。 总时间复杂度 O(n3d(n)logn)O(n3d(n)logn)O(n^3d(n)logn)

BZOJ5129——Divide_Conquer——Point_Divide
典型的点分治题目。
设disxdisxdis_x表示从SSS到x" role="presentation">xxx的最小代价wx=disx+costxwx=disx+costxw_x=dis_x+cost_x,
考虑最短路的DijkstraDijkstraDijkstra算法,每次从堆中取出www最小的x" role="presentation">xxx,然后更新与xxx距离不超过limx" role="presentation">limxlimxlim_x的所有点即可。
注意到DijkstraDijkstraDijkstra算法中每次取出的www单调不下降,故每个点只有第一次被更新时才是最短路,这说明一个点访问过就可以不再考虑它。
对树进行点分治,对于每个分治结构,从重心开始 BFS 预处理出一个序列,满足序列中所有点到重心的距离依次递增。
那么每次从堆中取出x" role="presentation">xxx后,枚举O(logn)O(logn)O(logn)个经过它的分治结构, 不断更新序列首部的点的最短路,并把更新过的点删除,直到树上距离超过limxlimxlim_x为止。
因为每个点只被O(logn)O(logn)O(logn)个分治结构经过,故总时间复杂度为O(nlogn)O(nlogn)O(nlogn)。

今天作业做得不少,看来有望做完了QAQ。

2.22

大家当我昨天写的最后一句话是个冷笑话好了。
不颓,是不可能的了,这辈子都不可能的了。
薇尔谢特还是那么美丽qwq。

BZOJ5124——DP——Common
这个题目和下面这个题目都放在题解里面了。

BZOJ5125——DP——Parallelogram
看上面。

BZOJ5126——Others——Miscellaneous
其实做法对于我来说还是有点神奇qwq。
将差值看成边权,并添加 0 边来消除负数,首先可以贪心将每个点都买到剩一个。
那么若是树或者自环,则答案为每个点的入边中权值的最大值。
对于环(自环除外)来说,必须要删掉环上一条边,枚举每条边删除即可。

这几天大概是不会写题目的了,一方面要写多一点点作业,另一方面还要学学vim,收拾收拾东西,看看番什么的。

2.24

今天碰了一道题,是为了学习用vim。然后这道题我还不会做。
不过大概是可以不用dev了吧,虽然只会最基础的操作qwq。

BZOJ3884——Math——Phi
大家看这里吧。

2.25

开学了,晚上讲了训练有关事宜?
然后继续练习vim。
lydsy终于把3708的数据改了!然后我就是第一个AC的人啊!可喜可贺、

BZOJ3708——Map——Euler_Path
这题还是很神的。

nnn个发生器就是n" role="presentation">nnn个点,边是每个发生器到它产生的数字,单向边。
那么,这题要做的事就变成,走一条路,使得在无路可走的时候,要么是没有停在nnn点,要么是没有遍历所有的边。

如果图不是欧拉路图:那么,我们随便dfs找条路就OK啦。

如果图是欧拉路:
如果结束点不在n" role="presentation">nnn:那么,我们也输出这条路。
如果结束点在nnn:去掉与n" role="presentation">nnn相连的边,判断剩下的图中是否存在环。
如果存在:那么去掉环之后,重新找条欧拉路,输出路径。
如果不存在:那么游戏失败。

BZOJ4106——Others——Miscellaneous
直接算出每个点函数值求极差。

2.26

这几天题解就不写在这里了,写一下用了什么方法就算了。写完WF2015开新博文来一起放。

BZOJ4114——Others——Miscellaneous
发现每一条航道都是独立的,那么对于每条航道算出可行的出发时间段,总计最多也只有10610610^6级别的区间数。然后问题就转化成了多组区间求交,将区间排序后用1和-1表示进出什么的乱搞就行了。

BZOJ4111——Search——BFS
由于每个点至多连4条边,所以令fi,j,kfi,j,kf_{i,j,k}表示到(i,j)(i,j)(i,j)这个位置,已经打了kkk个字符所需的最少步数,直接bfs就行了。

BZOJ4110——Others——Sub_Sequence
sort以后分开两个答案组和一个待定组。
对于每一个串,若只能放进其中一个答案组,就放进去;若两个答案组都能放,就看待定组情况。
若它能放在待定组,就放在待定组;否则将这个串和待定组里的串分别放在两个答案组,清空待定组。

2.27

然后发现自己很多WF的题都是不会做(或者懒得打)的,所以还是不拉出去写了。
昨天的sol已补。

BZOJ4108——Map——Network_Flow——Cost_Flow——Have_Lower_Bound
思考了一会dp,思考了一会网络流,无果,然后发现确实是个网络流。
将每个点拆成两个,之间连边,上下界均为1。用一个单独的点连向1限制流量,再加入每两点之间的边。
然后求有上下界费用流就行了。

BZOJ4116——Map——Tarjan——Bridge
考虑将边集E" role="presentation">EEE拆成一些子集E1,E2,E3,...E1,E2,E3,...E1,E2,E3,...,满足任意一个简单环可以被拆成一些子集的和,且不存在两个子集合并后仍满足条件,那么答案就是gcd(|E1|,|E2|,|E3|,..)gcd(|E1|,|E2|,|E3|,..)gcd(|E1|,|E2|,|E3|,..)的所有约数

对于一个简单环,上面的边一定不是桥边,而和它在一个集合的边肯定不在其他简单环上。因此删除它之后,这些边就从非桥边变成了桥边。
所以我们尝试删掉每一条非桥边并统计有多少边成为了新的桥边。
上面的gcd等价于gcd(删掉一条非桥边后新产生的桥边数量+1)

BZOJ3792——DP——Matrix
这种题一眼就是矩乘优化dp了吧。
构造矩阵就是把点当做原图的边。

2.28

BZOJ3609——Game_Theory——Common
因为刚开始的数量都是1,所以不论怎么合并,合并次数都是相同的。
所以我们就算一下合并次数然后看奇偶性就行了。

BZOJ4043——DP——Common
QBXT讲过的题目,非权限在UVALive-6932
令dp[i][0/1][0/1]dp[i][0/1][0/1]dp[i][0/1][0/1]表示前iii个字符,第一个字符串是否等于第二个字符串,第二字符串是否等于第三个字符串。
枚举第i+1位所有问号是什么字母,直接转移。复杂度O(n∗263)" role="presentation">O(n∗263)O(n∗263)O(n*26^3)。
预处理出f[i][j][k][0/1/2][0/1/2]f[i][j][k][0/1/2][0/1/2]f[i][j][k][0/1/2][0/1/2]表示第一个串字符是iii,第二个串字符是j" role="presentation">jjj,第三个串字符是kkk,由于可能出现“?”或者没有字符的情况。
因此若没有字符用0表示,若是“?”用27表示。
这样将其中所有“?”用字母代替后,第一个串的字符与第二个串的字符的大小关系是0/1/2,
第二个字符与第三个串字符大小关系是0/1/2的方案总数。
在转移时直接拿f数组转移。当然这个预处理的复杂度比较可怕233。

BZOJ4117——Math——Probability
一种天气情况的概率只与4种天气的出现次数有关,故将相同概率的情况计数后放入堆中模拟哈夫曼树即可。
即构造哈夫曼树的时候,假设最小的权值为p" role="presentation">ppp,有kkk个
那么合并成k2" role="presentation">k2k2\frac k 2个权值为p∗2p∗2p*2的结点
如果kkk为奇数,那么将其中一个放回去,剩下的合并

BZOJ4205——Map——Network_Flow——Max_Flow——Common
如果我们直接暴力建图,就算是dinic这种能过百万的方法怕也因为边太多滚粗了。
我们采用将边分类的方法优化。考虑a" role="presentation">aaa项属性值能被xxx整除且b" role="presentation">bbb项能力值能被yyy整除的所有点,只要是在两侧一定能够匹配,所以我们在匹配的网络流模型中间增加一排这样的点,满足要求的左右点分别与它相连,边权为正无穷。
因为x" role="presentation">xxx和yy<script type="math/tex" id="MathJax-Element-256">y</script>只需是质数,这样的点不会很多,大概7000个,而两侧每个点至多连出9条边,最后的图是70000个点,200000条边左右。但这样建图依然是分层图,这下用dinic就可以过了。

BZOJ4548——Others——Scan_Lines
用双向链表维护两边最近的相同颜色的点,考虑如果当前的点是该颜色点中最高的那么双向链表所指的横坐标就能确定下矩形左右边界,当这个矩形确定后,这个最高点会对两侧点造成干扰,删掉就好。这样下矩形就确定好了,上矩形将纵坐标上下翻转就好了。
3658双倍经验

转眼就三月了,要开新坑了qwq。
还有两个月就省选了啊。

【刷(shui)题记录】201802中旬~201802下旬相关推荐

  1. 刷(shui)题记录 2021.12

    [ABC228-G] Digits on Grid ⇒\Rightarrow⇒原题链接 可以发现行数和列数相当小,可以将其中一维状压,同时因为奇数步和偶数步的操作很类似,只需要考虑其中一种就行了,这里 ...

  2. 图论刷水题记录(二)(最短路-----SPFA算法)

    继第一篇的后续,又来刷水题了,写的是SPFA算法,这个算法的复杂度比较玄学,感觉能不用就不用了,但是他的好处就是可以判断负圈. 3月26日: 1.POJ 1847 Tram 题意:在一个交通网络上有N ...

  3. 图论刷水题记录(一)(最短路-----dijkstra算法)

    最近实在不知道干些什么,感觉自己除了水题什么都不会做,算了去刷一刷图论的水题吧本来想合起来一起发,想了想太长的话以后看起来也不方便,题目所以今天晚上就先发了dij部分,由上到下由易变难. 1.POJ ...

  4. LeetCode刷题记录15——21. Merge Two Sorted Lists(easy)

    LeetCode刷题记录15--21. Merge Two Sorted Lists(easy) 目录 LeetCode刷题记录15--21. Merge Two Sorted Lists(easy) ...

  5. LeetCode刷题记录14——257. Binary Tree Paths(easy)

    LeetCode刷题记录14--257. Binary Tree Paths(easy) 目录 前言 题目 语言 思路 源码 后记 前言 数据结构感觉理论简单,实践起来很困难. 题目 给定一个二叉树, ...

  6. LeetCode刷题记录13——705. Design HashSet(easy)

    LeetCode刷题记录13--705. Design HashSet(easy) 目录 LeetCode刷题记录13--705. Design HashSet(easy) 前言 题目 语言 思路 源 ...

  7. LeetCode刷题记录12——232. Implement Queue using Stacks(easy)

    LeetCode刷题记录12--232. Implement Queue using Stacks(easy) 目录 LeetCode刷题记录12--232. Implement Queue usin ...

  8. LeetCode刷题记录11——290. Word Pattern(easy)

    LeetCode刷题记录11--290. Word Pattern(easy) 目录 LeetCode刷题记录11--290. Word Pattern(easy) 题目 语言 思路 源码 后记 题目 ...

  9. LeetCode刷题记录10——434. Number of Segments in a String(easy)

    LeetCode刷题记录10--434. Number of Segments in a String(easy) 目录 LeetCode刷题记录9--434. Number of Segments ...

最新文章

  1. MySQL查询语句的45道练习
  2. 计算机网络原理超详解说
  3. 利用SQl对数据库实行数据拆分与组合
  4. Robust 源代码分析之gradle-plugin
  5. E-mail 标准 SMTP POP3
  6. Ubuntu19.04安装mysql8.0版本(亲测OK)
  7. Makefile中的变量
  8. 卸载Android虚拟机里的项目(cmd)
  9. mac 下 ssh被拒绝
  10. Django模板层:内置模板标签if,for in(forloop.counter)with,url,spaceless,autoescape,verbatim,firstof,block,cycle
  11. NetBeans第一部分代码提交Apache
  12. Ubuntu 12.04 中文输入法的安装
  13. 二分查找时间复杂度分析
  14. ftp文件推送 linux_Linux 终端访问 FTP 及 上传下载 文件
  15. C++指针、空指针、野指针使用的一些总结
  16. Windows 10 多出多个虚拟显示器的解决方法
  17. 遥感原理与应用总结——第三章:遥感传感器及成像原理
  18. php元换成万元,数字单位换算(元换算成万元换算器)
  19. 浅谈压缩感知(八):两篇科普文章
  20. 基金与私募基金概念解析:共同基金、单位信托、投资信托计划、券商集合理财、基金专户理财

热门文章

  1. 中国元宵节的习俗至少有12种,你知道多少?
  2. Sketch小技巧—进阶其他几种绘制饼图的方法(二)
  3. lol英雄联盟资深设计师讲解游戏角色动画制作过程
  4. 代运营公司和个人代运营的利弊?
  5. 极路由4pro交叉编译c、c++的代码
  6. pytest测试框架系列 - pytest 断言assert使用
  7. java的源代码存放于_android开发工程目录中用来存放java源代码的是哪个目录?
  8. java写入word_JAVA实现Word文件读写
  9. 经典的一个GIS学习定位帖(转)
  10. logstash 同步mongo 数据到 mysql