Educational Codeforces Round 127 部分题解

A String Building

考虑一段全部为 A A A B B B的子段,不难发现只有在该子段长度为 1 1 1的时候不能用 A A AA AA或者 A A A AAA AAA凑出,这样顺序扫一遍即可。

B Consecutive Points Segment

考虑顺序进行移动,如果一个点它不受左侧点的制约,那么一定将它越往右越好,如果受制约判断二者之间距离并向左移或者不移,如果在左侧的点考虑完之后还相差 ≥ 2 \geq 2 2那么就是不合法的,这样我们在扫的时候判断是否有不合法的情况即可。

C Dolce Vita

首先将序列排序,考虑到随着天数的增长能购买物品的区间一定是单调递减的一个前缀,这样我们不断将右边界向左移动即可,注意判断 r r r减小时上限天数不变的情况。

D Insert a Progression

考虑一个序列 7   2   10 7~2~10 7 2 10,我们在 7   2 7~2 7 2之间插入 2 2 2 7 7 7之间的任何数都不会对于答案产生贡献,因为我们可以顺序插入。这样不难发现只有 1 1 1 m i n n − 1 minn-1 minn1 m a x x + 1 maxx+1 maxx+1 x x x的数会产生贡献,并且一定是将这两段分别作为整体插入最优,这样实际上就是考虑插入 1 1 1 x x x,可以线性解决。

E Preorder

我们定义两个本质相同的子树为通过任何的交换方式能够使得二者的中序遍历字符串相等。这样我们考虑父节点 u u u的两个子树,定义 f [ u ] f[u] f[u]表示 u u u节点本质不同的字符串的种类数,如果两个子树本质相同就有 f [ l s ] ∗ f [ r s ] f[ls]*f[rs] f[ls]f[rs],否则有 f [ u ] = 2 ∗ f [ l s ] ∗ f [ r s ] f[u]=2*f[ls]*f[rs] f[u]=2f[ls]f[rs],这样我们只需要判断两个子树本质是否相同,考虑用哈希,考虑将左右子树取在 b a s e x base^x basex的同一个 x x x里,这样左右子树的相对顺序就不会产生影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值