奇差。ABC三题,排名400。
首先是策略问题。
由于第一眼看到D的时候感觉不太会做,于是去看E。
一看到E这不欧拉回路吗,可做可做,
于是——我不会欧拉回路!
手推。推了半天啥也没弄出来,
于是大概按照样例琢磨了一个小小的(错的)思路,
于是——WA!
想了想发现有个反例,也不会改,
想回去做D,但是——the contest has ended
!!!
我怎么没看时间呢???
啊啊啊。。。
D多么简单。。。
1152d:首先把状态改变为(i,j),表示到了第i个位置,打开的左括号有多少。
那么我们就考虑dp。
dp状态就是dp(i,j)表示以(i,j)这个状态开始的子树中最多有多少条边。
转移的时候枚举走dp(i+1,j+1)和dp(i+1,j-1)。
然后我们观察在哪些地方才去取一个到儿子的边。
根据trie的形状,我们取i为奇数的到儿子的边更合算一点。
那就做完了。
大家都是这个做法。只是有人用了记忆化搜索。
1152e:首先考虑建图,就是把b[i]和c[i]连无向边。
那么肯定先要离散化。
那么问题就被转化成这个图能不能求一条欧拉路径。
其实写起来非常简单。。。
就是如果当前这条边并没有被用过,直接走上去,
直到跑完再输出走到的那个顶点。
我也不知道这样为什么是对的。
只是考完看了刘汝佳的书才知道的。
大家也都是这个做法。还有人贴了板子?
中间遇到的问题
d:我在考试中几乎所有的时间都在e上,所以d就没有时间考虑。考完发现其实不难。
wa4:这个是贪心错了在偶数层取到儿子的边了。
e:考试的时候不会欧拉路径,只好手推,但想不出一个比较对的做法
wa5:这个是没有考虑可能有欧拉回路的情况。
wa8:这个是欧拉路径求错了的情况。
tle11:原来我只是用了vector存图,那么就会发生每到一个节点就重新遍历一遍这个点的所有边的情况,那么重复走两个节点的情况就炸了。后改用multiset存图,每走过一条边就删掉,不会出现重复的情况。