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