2017多校游记3~4

Day 3

  这次连我省队长都跑了,加上pear要选课,大概后半场是稳稳地要单打了,感觉药丸...

  被那个sb的移动网折腾地快1h才上线,幸亏吴核心给我看了1005,上去就先过再说,这时候队友也上线了,切了08,11两个签到题,开始卡02...

  后面真就变成了一个人单打,也不想说啥了,做的不是结论就是sb题,要不是开黑弄来02,怕是这个07调不出来要把整场多校给废了...

  4h写了7题(算上07),这在我校多校模式下也是罕见的吧...

部分题解(待更):

1002:

1003:

1004:

1005:

1006:

1007:

1009:

1010:

Day 4

  虽然我省队长还是没回来,但今天配合的还是蛮好的

  上来先开了06(不过还是比开01好写),仔细想了半天啥也没想出来,扔了算了(你妈的谁能想到哪个询问的m是用来卡常的,wori)

  又开了07,发现是sb基环树题,赶紧写了,又有一血啦...看了04发现是略复杂的分数规划,但发现和czy撞题了,就去看13了

  想了会儿13,刚动手写树套树就发现好像不好传懒标记,就感觉只能分块了,决定先放一边再说。回来看小朋友们过了02,想了一下是不算复杂的字符串,我居然把独立贡献乘起来算答案(谁叫样例给了等于没给),简直不知道说什么好...

  pear给我讲了05做法,顺手写了烦人的讨论题,回来一看12过了,进前三了...

  然后一群人就开始卡10了,本来都以为答案不会太大,但写了就是过不了,然后发现可以splay维护dp数组,写着写着发现连splay都不要,写个deque就行了,于是折腾了快一个小时才过。

  最后看了08,发现是个裸的最小生成树,只要点奇怪的优化就行了,可是罚时太大,最后就只有rk6了...

部分题解(待更):

1001:

1002:把询问改为从不超过$L$个字符的前缀和不超过$R$个字符的后缀并在一起。考虑两个串并在一起对答案的贡献是两端上面个数之和,加上左边$i$和右边$m\!-\!i$并起来可行的数量。用kmp分别处理出来正反方向的每个$i$个字符的后缀能否匹配目标串的前$j$个字符后,对$i$求一下前缀和$l(i,j),r(i,j)$,在对可以匹配整个目标串的部分再求一下前缀和$sl,sr$,那么答案就为$R\cdot sl(L)+L\cdot sr(R)+\sum\limits_{i=1}^{m-1}sl(i)sr(m-i)$。复杂度$O(nm)-O(nm)$

1004:考虑二分答案,每个点均减去$mid$,最后一次出现的点加$1$,如果最小部分和小于$0$,那么就存在更小的。从前往后枚举右端点,利用线段树维护当前情况下每个左端点对应的部分和即可。复杂度$O(nlog\,n\;log\,\frac{1}{eps})-O(n)$

1005:如果有一条边经过奇数次,那一定绕整个环走了奇数次,先枚举是否存在这样的情况。对于剩下的情况:枚举边使用的情况(经过$2$个点$2$种,$3$个点$3$种,$4$个点$5$种):每条边必然再使用$2$次,初始值即可算出,这样就变成了经典的最短路问题(算出对最大取模下的最小可行数值)。复杂度$O(20n)-O(n)$

1006:

1007:由于左边每个点度数为$2$,根据Hall定理,每个联通块左右点数必然相同,那么就形成了若干个点数=边数的联通块(即基环树)。搜出每个联通块的环后对剩下每棵树跑一边匹配,若环上点都剩下来了,那么就存在奇偶两种情况,否则根据已匹配的点把环切成若干链,就可以简单计算了。复杂度$O(n)-O(n)$

1008:类似kruscal,每次加入一种线路之后,令相关的点连通,由于之前做完之后连通性是固定的,无论怎么连边数都一样。那么用一个并查集维护整张图的连通性,再拿一个并查集维护每个点向上(包括自己)最近的没和他的爸爸连边的点(如果搜到一个点一个和他的爸爸连通,假装新和爸爸连了一条权值为$0$的边,跳过即可)。对于每条线路分别把两条路径上每个点(除了lca)和他爸爸连上,最后把这两个路径合在一起即可。复杂度$O(nlog\,n)-O(nlog\,n)$

1010:如果两个点能一起过,那么一定一起过。考虑二维dp,$\!\mid a_i\!-\!b_j\!\mid >\!k:dp(i,j)\!=\!dp(i\!-\!1,j\!-\!1)\!+\!1$ otherwise:$dp(i,j)\!=\!min\{dp(i\!-\!1,j),dp(i,j\!-\!1)\}\!+\!1$。考虑对于每个i如何维护这个dp数组:把$dp(i,j)$都减去i,把整个数组拷贝右移一位,再前面填上一个0,对于特殊的O(k)个点,按位置p从前往后取$min\{dp(p\!-\!1)\!+\!1,dp(p\!+\!1)\}$即可(因为$dp(i,0)$~$dp(i,p\!-\!1)$此时已是正确数值,$dp(i,p\!+\!1)=dp(i\!-\!1,p)$)。对于移动操作,用个deque维护一下即可。复杂度$O(nk)-O(nk)$

1012:考虑二维dp:$dp(i,j,k)$表示第一个做完了$i$个,第二个做完了$j$个,现在$a$数组是否是用了偶数个,其中若$a(i)\!=\!b(j)$表示两个数组都转移完了,否则表示只转移了$a$数组的情况。那么$a(i)=b(j)$时$dp(i,j,k)\!=\!\sum\limits_{j_2=1}^{j\!-\!1} dp(i,j_2,k)$否则$dp(i,j,k)\!=\!\sum\limits_{i_2=1}^{i\!-\!1} dp(i_2,j,k\!\oplus\!1)$。两种情况均可以用前缀和优化。复杂度$O(n^2)-O(n)$

posted @ 2017-08-03 18:42  rqgao2014  阅读(188)  评论(0编辑  收藏  举报