wc记录

WC记录

咋可

随机化

CF1746F

给每个值随机成\(0/1\),然后查询区间内的所有数的和是否\(\equiv0\mod k\)

考虑错误率,对于一个不合法的权值,设其有\(r\)个,考虑区间内此时其他数的和为\(S\),那么再加上该值,要么是\(S\)、要么是\(S+r\),因为\(r\≡0\mod k\),所以一定有\(S\≡S+r\mod k\),那么也就是\(\frac 12\)的错误率

那么只要随机个\(40\)组即可,错误率就只有\({\frac12}^{40}\)

NOI 2013向量内积

  • 对于\(k=2\)

若不存在这样的\((i,j)\),则必存在\(\forall i\neq j,\sum_ka_{i,k}a_{j,k}\equiv1\)

那么来考虑判断这个东西,则每次随机一个集合

sjy

qoj4809 Maximum Range

找到一个点双,显然点双内的最小的边和最大的边都可以出现在同一个环上

那么难搞的就是输出方案

考虑在最小边和最大边的边中间建一个点,分别是\(S\)\(T\)

然后跑最大流,跑完取有流量的部分再跑一遍欧拉回路就好

SWTR-8 地地铁铁

首先显然,缩点了

对于同一\(scc\)的点

若该\(scc\)的边全部同色,则显然都不合法

否则存在不同色的点的话,\((x,y)\)非法当且仅当\(x\rightarrow y\)的所有路径,都是同色路径,且可以发现,这样的一个\(scc\)中的不合法的\((x,y)\)只会存在这样一对

具体找的话,考虑这样一个\(scc\)中有多少个点的相连的边的权值存在不同的,若\(>2\)个有,则显然不存在,否则如果恰好\(2\)个,那么\(check\)一下这对点是否满足条件即可

那么考虑不同\(scc\)之间的,当且仅当中间路过的\(scc\)的所有边的同一种颜色,或只路过了一个混色但相接的两端恰好是非法点的\((x,y)\)的某些情况下非法

qoj7682 CCPC 2023 Guilin F: Redundant Towers

首先,非个点就是圆方树的叶子,那么就建圆方树

把每个点放到是排列的那一轴上,考虑线段树维护每个区间内的点的圆方树

直接维护显然会寄,考虑优化一下,发现每个区间只有最左和最右\(O(R)\)个点在后面可能会有连边,其他的都不会再连边了,所以维护这\(O(R)\)个点的虚树

合并的复杂度就是\(O(R^2)\)

总复杂度\(O((N+QlogN)R^2)\)

[SNOI2013] Quare

边双联通\(\Leftrightarrow\)有耳分解,所以直接找耳分解就好

\(dp[s][i][t]\)表示当前已有\(s\)的点,最后一个是\(i\),需要到达\(t\)

IOI2019 景点划分

两年前做过?

建出圆方树,设\(A\leq B\leq C\),显然最简单的办法就是让\(A\)\(B\)连通

且显然只会有一个方点相连的圆点不属于同一连通块,枚举这个方点

若其最大子树\(>n-A\),显然不行

若最大子树\(\geq B\),直接在外面选\(A\),最大子树里选\(B\)

那么现在所有子树都\(<B\)

双极定向一下,然后取出前缀的\(A\)个当\(A\)的,后缀的\(B\)个当\(B\)

显然取到选出的子树总大小\(\geq A\),剩下的子树总大小\(\geq B\)

WF2015 Tours

先建出\(dfn\)树,然后给每个非树边随机赋值,且把被它覆盖的那些树边的值都异或上随的这个值

那么对于最终所有权值相同的树边,它们是满足切边等价的,即对于每个简单环,要么都属于,要么都不属于

对于每个环\(cyc\),枚举它包含的等价类\(S\),则要满足对于任意\(c\)都有\(\sum_{S\in cyc}(k\times cnt(c,S)-|S|)=0\)

列成高斯消元的形态,这是满秩矩阵,有唯一解,即\(k\times cnt(c,S)=|S|\)

记所有等价类的大小是\(s_1,s_2,s_3,...\),则只要\(k\mid\gcd(s_1,s_2,s_3,...)\)即可,即给每个等价类的边均分成\(k\)种颜色

kubic

AGC068E Sort and Match

对于\((x_i,y_i)\),可以考虑连边\(y_i\rightarrow x_i\),连出来的会是欧拉图,给每个点的出边一个出去的顺序,可以按照\(i\)的大小来,那么就是一个有向图上的游走的过程

\(1\)点出发,若该点还有出边,则走编号最小的那个,若没有了,则跳到编号\(+1\)的点

显然这个过程和\((x_i,y_i)\)一一对应

那么考虑\(dp\)计数这个过程,设\(dp[x][s][c]\),表示当前在点\(x\),该欧拉回路的起点是\(s\),已经连了\(c\)条边了,枚举下一个\(x\)即可,要求\(x_1=k\),即要求编号最小的出边到达的是\(k\),倒着\(dp\)特殊处理最后一步即可

复杂度\(O(N^4)\)

agc055F

首先考虑怎么判序列合不合法,显然贪心,从前往后尽量给小的填有点问题,可能会遇到合法但这样分配会出问题的情况:

\(113113,2\times3\)

但是从后往前尽量给小的填不会有问题

因为从前往后,条件是不断放宽的,所以并不清楚该不该先去给某个点一直放宽限制,但从后往前,限制是不断缩减的,我们一定会先满足限制最严的那个

那么维护\(\{b_i\}\)表示从后往前贪心时,当前每一个序列还剩的需要的点数,显然我们每次放\(x\),找到最小的\(b_i\geq x\),然后\(--b_i\),则\(b_i\)是非严格递减序列

对于这种,我们一般就是维护差分\(c_i=b_{i-1}-b_i\),每次\(--b_i\),就是\(++c_i\)\(--c_{i+1}\),贡献系数是\(b_i-b_{i+1}\)

也就是说,可以看作初始时,\(n+1\)上有\(m\)个不同的球,然后要求全部移动到\(1\)上,每次可以把任意一个球向左挪动一位

因为要求\(nm-x+1\)步放\(y\),假设它放到了\(p\)位置,就要求\(-\sum_{i\leq p}c_i\geq y\&\&-\sum_{i\leq p+1}c_i<y\),显然可以容斥一下变成\([-\sum_{i\leq p}c_i\geq y]-[-\sum_{i\leq p+1}c_i\geq y]\)

显然所有球的操作是独立的,且整体操作分为前\(nm-x\)步,第\(nm-x+1\)步,后\(x-1\)步,可以算出第一部分的方案再乘上第二部分再乘第三部分的

\(f_{i,j,k,p}\)表示考虑前\(i\)个球,有\(j\)个在第一部分的位置\(\leq p\),且有\(k\)步是第一部分的

复杂度\(O(N^3M^3)\)

CF1806F2

要求将数划分成\(n-m\)个集合,最大化所有集合的\(gcd\)之和

考虑一个集合里有两个数\(x>y\),则\(2gcd(x,y)\leq x\),那么对于两个有多种数的集合\(S_1\)\(S_2\),显然把\(max(max\{S_1\},max\{S_2\})\)单独提成一个集合,剩下的塞同一个,明显不劣

那么我们只会有至多一个集合里有多种数,将 合并相同元素合并不同元素看作不同操作,枚举一下各自的数量,设\(t\)表示前者的,\(m-t\)就是后者的,前者的代价是,每种值都去掉一个后的,-前\(t\)小之和

那么现在就要选出\(m-t+1\)个不同的元素,把它们放到同一个集合中,最小化\(sum-gcd\)

将所有元素从小到大排序,若\(i<j<k\)且选了\(a_j\)\(a_k\)不选\(a_i\),此时\(gcd\leq a_k-a_j\),设原本的\(sum-gcd\)\(V\),则现在是\(V'=V-k+i+(gcd-gcd')\),又因为\(gcd\leq a_k-a_j\),那么有\(V'\leq V+a_i-a_j<V\)显然更优

即最后选出来的是形如,\(a_1,a_2,...,a_i,a_p\)\(p>i\)

然后枚举\(i\),若\(gcd(a_1,a_2,...,a_i)=gcd(a_1,a_2,...,a_{i+1})\),则\(p\)直接选\(i+1\),而不满足这个的\(i\)只有\(logV\)

复杂度\(O(NlogV)\)

CEOI2014 The Wall

首先有个结论,从起点到所有关键点的最短路都一定会被包含在最终的回路中

证明:

如果没有包含,显然把该最短路和回路相交的两点间换成该最短路的走法,显然总代价不会劣,且包含的区间更多,显然更优

然后会想加上一些限制跑最短路,大概就会是限制,不能走某些边,但是发现直接限制无法保证一定能包含所有最短路边在回路中

但是可以把一个点拆成四个点,然后一条横边就拆成了上下两条,一条竖边就拆成了左右两条,对于一条最短路,要求不能走“穿过”这条边的路即可

IOI2019 折线

很牛的题啊,大概手模一下,你能找到这几种策略:

对于一些满足\(x_i\leq x_{i+1}\&\&y_i\leq y_{i+1}\)的点,显然每条线都能走到一个点,这种情况只要\(O(N)\)条线

对于满足\(x_i\leq x_{i+1}\&\&y_i\geq y_{i+1}\)的同理

而对于不太满足上述情况的,可以考虑一直转圈,类似回字型

考虑把这些做法结合起来,最开始一直绕回字,对于当前向右横边距离,找到最靠右的那个点,然后向上拐/向下拐

如果最靠右的就是当前线上的点,注意到它已经是所有剩余的点中最靠右且最考上/下的,那么我们回退这条线段,并把该点加入到第一类or第二类的集合中,然后最后再来收割第一类和第二类的

显然类与类之间有过渡用的线段,包括第一次进入第三类时,所以线段最多是\(n+3\)

IOI2024 象形文字序列

先假设有解,后面再来判,显然要求的是最长公共子序列\(c\)

先对于每种字符,找到它们在\(a\)\(b\)中的数量,对于少的那一侧,显然必须全部包含在\(c\)中,那么把少的那一侧的那些字符做个标记

那么现在就是要将\(a\)\(b\)中相同的字符一一不相交的匹配,且保证被标记的位置都要被匹配上

考虑现在在考虑位置\(a_p\)\(b_q\)

\(a_p=b_q\),直接匹配

\(a_p\)的匹配点在\(b_q\)前出现,且\(b_q\)的没在\(a_p\)前出现,显然直接让\(a_p\)匹配上即可

对与\(b_q\)的出现了,且\(a_p\)没出现一样

若两者都出现了,再继续讨论一下

现在加点限制,显然若\(a_p\)之后的数中,若\(b_q\)的出现次数少于\(b_q\)及之后\(b_q\)的出现次数,则\(b_q\)必须匹配\(a_p\)之前那个可以匹配的字符,对于\(a_p\)同理

那么现在的情况就是,\(a_p\)\(b_q\)都不必现在就匹配,那么此时,\(a_qb_p...b_p\)\(b_pa_q...a_q\)都是\(a\)\(b\)的子序列,但发现它们不可能同时是\(c\)的子序列,因为此时的\(a_p\)\(b_q\)必有一个先匹配,也就是说出现这种情况直接输出不合法即可

因此每一步都有唯一的决策,复杂度\(O(N)/O(NlogN)\)

再考虑如果\(check\)求出的\(c\)是否合法,可以找\(c\)的每一位,在\(a\)\(b\)中分别对应在了\(a_p\)\(b_q\),同时也维护在\(a\)\(b\)中分别对应的\(x\)\(y\)(即用\(c\)每次找\(a/b\)中下一个等于当前\(c_i\)的字符的位置),显然\(x\leq p\)\(y\leq q\)

若某一时刻\(x<p\)\(y<q\),显然就不合法了

考虑\(x=p\)\(y=q\)时,算出\(f_p\)\(g_q\)分别表示\(x=p\)\(y=q\)时对应的最小的另一侧的匹配位置,然后就可以判断的

复杂度\(O(N)\)or\(O(NlogN)\)

qoj9881 Diverge and Converge

考虑到两棵树的总读书是\(4(n-1)\),那么也就是说,一定存在点\(x\)满足\(d_1(x)+d_2(x)\leq3\)

\(d_1(x)=d_2(x)=1\),即说明\(x\)在两棵树中都是叶子,那么直接交换\(x\)的边即可,可以视作在两边都删除了\(x\)这个点,直接递归到子问题即可

否则,设\(d_1(x)=2\)\(d_2(x)=1\),那么在\(d_1\)中有边\((x,a)\)\((x,b)\),在\(d_2\)中有边\((x,c)\),还是想要考虑递归的做法

\(d_2\)中删去\(x\),在\(d_1\)中压缩边\((x,a)\)\((x,b)\)变成\((a,b)\),那么在后续\((a,b)\)\((b,v)\)交换时,就是\((b,x)\)\((b,v)\)交换,\((x,a)\)\((x,c)\)交换的,然后其实可能这里面的哪条边也是压缩边啊,反正就一直递归下去的把压缩边解压就好了

The3rdUniversalCup. Stage7:WarsawC.PriceCombo

首先问题等价于,每个数选\(a_i\ or\ b_i\),且对\(A\)\(B\)从大到小排序,取出它们的奇数位的\(sum\)就是答案

先贪心的考虑,选\(min(a_i,b_i)\)

再考虑把哪些数换成大的那个

若现在有两个数选择交换,设它们原本是\(x_1\)\(x_2\),换成了\(y_1\)\(y_2\)

显然,当\(\max(x_1,x_2)\leq\min(y_1,y_2)\)时,无论\(x_1\)\(x_2\)是否同类型,换了过后都不优

那么也就一直着,如我们把要换的\(x_i\)\(y_i\)连边,则任意两条边都不能有交集

直接把\(x_i\)\(y_i\)放到数组上,\(dp_{i,0/1,0/1}\),后面俩表示当前\(A\)\(B\)的大小的奇偶性,\(i\)表示考虑前\(i\)大数

转移只需要维护一下区间内的\(x_i\)的类型以及奇数/偶数位上的和即可,线段树可以解决

复杂度\(O(NlogN)\)

The3rdUniversalCup. Stage13: SendaiN.0100Insertion

首先显然可以想到把\(1\)看作分割符,用\(a_i\)记录每个联通段内的\(0\)的数量

那么一次操作就是选择\(a_i\geq1\)\(a_{i+1}\geq2\),然后合并\(a_i\)\(a_{i+1}\)\(a_i+a_{i+1}-3\)

这种有个经典\(trick\),设\(b_i=a_i-3\),那么每次就是直接变成\(b_i+b_{i+1}\),要求\(b_i\geq -2\)\(b_{i+1}\geq -1\)

可以发现,若当前元素数量\(\geq 2\),且存在\(b_i\leq -3\),那么就无解了

也就是说,要所有的\(b_i\geq -2\),那么此时先找出为\(-2\)的点\(x\),要求对于所有的\(x\geq 2\),要存在\(y\geq x\)满足\(\sum_{i=x}^y a_i \geq -1\)

显然这个就是充要条件

那么直接\(dp\)\(0\)\(+1\)\(1\)\(-3\),要求不能存在相邻的\(-3\),且每个后缀的最大前缀和都要\(\geq -1\)(整个序列为后缀时除外)

复杂度\(O(N^3)\)

The 2nd Universal CupSemifinals H.Exchanging Kubic2

因为要求的是极差,且可以注意到,对于相邻的两个点\(i\)\(i+1\),它们的相对位置是不会改变的

那么极差其实就是相邻两点的距离之和

发现相邻两点\(i\)\(i+1\)改变距离时,当且仅当一个当前\(a_j=a_i/a_{i+1}\)的点\(j\)进行了一次操作

进一步的,我们可以视作,每个点\(a_i\)会在数轴上,向左右两侧连出一条边指向某一个\(v,v+1\)之间,可以直接用\(v.5\)表示(

要求每条边连向的点不重,且设\(a_i\)连向的是\(l_i\)\(r_i\),要求所有\([l_i,r_i]\)不交或包含

显然发现对于任意相交的情况,可以很容易的调整成不交/包含的情况,所以可以忽略这个限制

答案就是\(a_n-a_1-\)边的数量

那么根据\(hall\)定理,向左匹配的最大数就是\((n-1)-max_i\{(i-1)-(a_i-a_1)\}\),向右是\((n-1)-\max_i\{(n-i)-(a_n-a_i)\}\)

最大匹配数是两者之和对\(a_n-a_1\)\(\min\)

化简得到\(\max(\max_i\{a_i-i\}-\min_i\{a_i-i\}-n+1,0)\)

\(\max\)\(\min\)拆开分别计算贡献

然后可以枚举\(\max_i\{a_i-i\}\)的值,然后去\(dp\),要记录状态是否有\(=\)这个\(\max\)的点以及是否存在\(\max-(a_i-i)-n+1\geq 0\)即可

\(\min\)同理

复杂度\(O(NM^2)\)

wc t2

先考虑\(B\)性质啊,考虑第一问怎么做

首先可以发现,每个数的进位,一定是最前面有一个\(0\rightarrow 1\),后面无所谓,且对于\(0\rightarrow 1\)的贡献是\(2^d\),对于\(1\rightarrow 0\)的贡献是\(-2^d\)

可以从高到低枚举\(d\),若该位上的异或和为\(1\),就选剩下的数中,在该位是\(0\)且在更低位中数值最大的那一个,把它在\(d\)操作\(0\rightarrow 1\),更低位都操作\(1\rightarrow 0\),然后删除它,并插入一个\(0\)

发现这是一种类似,反悔贪心的过程,复杂度\(O(log^2N)\)

再考虑构造方案,依旧根据这个贪心的过程,发现对于当前位\(d\),如果该位为\(0\)的有两个数\(x\)\(y\),且\(x\)在更低位比\(y\)

显然,贪心时会优先选\(x\),发现如果其实可以不用选\(x\)直接选\(y\),那么在贪心的选法中,后面的\(d'\)会选上\(y\),且\(x\)的所有贡献都能别其他数的贡献所替代

也就是说,构造方案时,对于每一位\(d\)还是从大往小枚举当前选的时谁,如果不合法就可以直接\(break\)

所以复杂度是\(O((N+M)log^2N)\)

再来考虑更普遍的情况,不存在\(a_i=0\),那么也就意味着对于最高位为\(1\)\(d\),可能会存在所有\(a_i\)在这一位上是\(1\)的情况

此时,我们会找到最低的\(d'>d\),且满足存在至少两个数在该位上是\(0\),那么就是这一位是最高的改变的位

要算第一问的话,可以枚举一个数钦定它必须在\(d'\)进位,剩下的按照上面贪心的做法即可

求方案的话,发现用上面这种钦定的做法即可,只要注意一下枚举的时候重复的对即可

复杂度\(O((N+M)log^2N)\)

cts d2t1

首先这个每个点的贡献只和它的黑白边度数有关,设分别是\(a\)\(b\),那就是

\(\frac{a(a-1)b+ab(b-1)}2\)

显然可以背包,那就是\(O(N^2)\)

考虑树的情况怎么优化,贪心的选孩子里贡献最大的,再往\(a=b\)的方向贪心调整之类的

那么仙人掌类似,注意到仙人掌的话就是孩子可能还会给父亲贡献\(+2\)的度数

目前不会,似了

cts d2t2

通信题,没做过啊

这里直接考虑每轮给\(x\)的那些值得和为\(s\),直接用\(s\)在二进制下的每一位表示某一个\(p\)\(a_p\)

那么每次最多传\(\lfloor logN\rfloor\)个数的信息,且还要保证,这其中的第\(i\)个数必须要有\(2^i\)个点知道它的值,且所有\(i\)\(j\)对应的那\(2^i\)个和\(2^j\)个不交

那么对于\(k=1\sim7\),可以推出每次每个点新增的知道对应值的点的数量就是:

K=1,N=2:1

K=2,N=4:1 2

K=3,N=6:1 2 2

K=4,N=11:1 3 3 3

K=5,N=14:1 3 3 3 3

K=6,N=21:1 3 4 4 4 4

K=7,N=25:1 3 4 4 4 4 4

posted @ 2025-01-25 21:55  LuoyuSitfitw  阅读(19)  评论(0)    收藏  举报