2021-team02-004

从 Trac 迁移的文章

这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。

原文章内容如下:

[/wiki/2021-team02 返回]

[[Image(Rank.png,1000px)]]

= 概述 =

 solved: ??/??

 rank: ??

= 流水账 =

今天验题赛,所以没有大榜。

开场 cxt 跟榜签到 H,然后 cy 光速会了 A,可是 A 复杂又卡常卡空间。cy 在多次卡各种东西后通过。其间 pb 会了 F 并且穿插在 A 的调试之间通过了。

中期,cxt 过了 J,cy 边想边推过了 E,pb 推出了 G 的式子并且较快通过。

后期,cy 开始写非常难写的 E,cxt 在机下和 pb 讨论后发现了 C 的奇怪做法。最后22min,cy 发现少写了一棵线段树,于是 cxt 上机冲 C,运气不错在还有 7min 的时候一发过了

= 总结 =

=== pb: ===
G题开的很慢,自己没有在思路出现问题的时候快速跳出之前的思路,错误得估计了题目难度,往比较难的方向想了,但其实是很简单的题

另外决策上的小问题大概是没听懂cxt给的K的提示,可能有一半是对的,但是卡特兰数可能自己也没细想,导致K没有想到应该怎么算,所以可能我自己写G是更好的选择,这样cxt有更多的时间准备C

但是赛中很难想到C是个很可做的题,榜上根本没有,前面也没有明确的思路,感觉还是需要多做尝试

遗憾的是E留下的时间不太够,另外见识的还不够多吧

=== Creatix: ===
确实,后来想想 J 还是写慢了。
主要是当时抄代码抄的很~~(拖沓)~~细心,然后后面写的也不快。

样例倒是没怎么调直接过了。

可惜没能给 cy 省出更多时间写 E。
=== Eden_CY: ===

事实证明用string存字符串开的空间比用数组大不少。

最后写E的时候还是有点没想清楚。

最近经常写bug,要注意下细节。


= 题解 =

 * A:类似建虚树把缩点后的Trie树建出来,把父结点被标记且子树内没有标记的点计入答案。

 * B:sub哥哥的推理题。

 * C:考虑优化匈牙利算法。前 n - 100 个点可以按顺序直接匹配,不需要反悔,或者说增广路长为 1,所以简单set维护即可。最后 100 个点,模拟匈牙利算法:首先把待匹配的女士点的出边全部访问一遍,这样就只有 100 个点(即待匹配的女士不想匹配的男士)没有 vis 过,所以之后找出边的时候只需要考虑每个点的出边和那 100 个点的交集。于是,除了待匹配点,每个其它点的有意义的出边最多只有 100 条。这样的话,总边数是 O(n * 100) 级别的,直接套用匈牙利算法即可。因为要对100个点求增广路,总复杂度 O(n * 100 * 100)

 * D:对直径长度为奇数的点,枚举中间的边构造。对直径长度为偶数的点,枚举中间的点构造。

 * E:线段树。

 * F:签到,按儿子个数从大到小排序贪心即可。

 * G:广义容斥,直接算至少有k个人活着的概率

 * H:签到构造。

 * I:一个重要的思路是,看到根号上取整,就要想到可能是转换成一个 m * m 的矩阵然后把空余位置补全。很巧妙~~(奇怪)~~的构造。大概就是先转换成矩阵,然后稍微处理一下让奇偶个数不同。

 * J:抄个点到多边形的切线的板子就过了。另外,询问最少数量的环上的区间是否覆盖了整个环可以用倍增。

 * K:首先两维独立,要算ans(t)为走t步在[1,n]之内的方案数。考虑两个算法。1.f(i,j)代表走了i步在j的概率,就是朴素的dp,复杂度O(tn)。2.考虑ans(t)=2·ans(t-1)-f(t-1,1)-f(t-1,n),计算f(t-1,1)可以用容斥,设L(i)为i关于0的对称点,R(i)为i关于n的对称点,g(i)为走到i的方案数,那么有f(t,1)=g(1)-g(L(1))-g(R(1))+g(R(L(1)))+g(L(R(1)))... 这部分每次对称距离会增加n,复杂度为O(t^2^/n)。 两种算法big small即可。

[/wiki/2021-team02 返回]

概述

solved: ??/??

rank: ??

流水账

今天验题赛,所以没有大榜。

开场 cxt 跟榜签到 H,然后 cy 光速会了 A,可是 A 复杂又卡常卡空间。cy 在多次卡各种东西后通过。其间 pb 会了 F 并且穿插在 A 的调试之间通过了。

中期,cxt 过了 J,cy 边想边推过了 E,pb 推出了 G 的式子并且较快通过。

后期,cy 开始写非常难写的 E,cxt 在机下和 pb 讨论后发现了 C 的奇怪做法。最后22min,cy 发现少写了一棵线段树,于是 cxt 上机冲 C,运气不错在还有 7min 的时候一发过了

总结

pb:

G题开的很慢,自己没有在思路出现问题的时候快速跳出之前的思路,错误得估计了题目难度,往比较难的方向想了,但其实是很简单的题

另外决策上的小问题大概是没听懂cxt给的K的提示,可能有一半是对的,但是卡特兰数可能自己也没细想,导致K没有想到应该怎么算,所以可能我自己写G是更好的选择,这样cxt有更多的时间准备C

但是赛中很难想到C是个很可做的题,榜上根本没有,前面也没有明确的思路,感觉还是需要多做尝试

遗憾的是E留下的时间不太够,另外见识的还不够多吧

Creatix:

确实,后来想想 J 还是写慢了。

主要是当时抄代码抄的很(拖沓)细心,然后后面写的也不快。

样例倒是没怎么调直接过了。

可惜没能给 cy 省出更多时间写 E。

Eden_CY:

事实证明用string存字符串开的空间比用数组大不少。

最后写E的时候还是有点没想清楚。

最近经常写bug,要注意下细节。

题解

  • A:类似建虚树把缩点后的Trie树建出来,把父结点被标记且子树内没有标记的点计入答案。
  • B:sub哥哥的推理题。
  • C:考虑优化匈牙利算法。前 n - 100 个点可以按顺序直接匹配,不需要反悔,或者说增广路长为 1,所以简单set维护即可。最后 100 个点,模拟匈牙利算法:首先把待匹配的女士点的出边全部访问一遍,这样就只有 100 个点(即待匹配的女士不想匹配的男士)没有 vis 过,所以之后找出边的时候只需要考虑每个点的出边和那 100 个点的交集。于是,除了待匹配点,每个其它点的有意义的出边最多只有 100 条。这样的话,总边数是 O(n * 100) 级别的,直接套用匈牙利算法即可。因为要对100个点求增广路,总复杂度 O(n * 100 * 100)
  • D:对直径长度为奇数的点,枚举中间的边构造。对直径长度为偶数的点,枚举中间的点构造。
  • E:线段树。
  • F:签到,按儿子个数从大到小排序贪心即可。
  • G:广义容斥,直接算至少有k个人活着的概率
  • H:签到构造。
  • I:一个重要的思路是,看到根号上取整,就要想到可能是转换成一个 m * m 的矩阵然后把空余位置补全。很巧妙(奇怪)的构造。大概就是先转换成矩阵,然后稍微处理一下让奇偶个数不同。
  • J:抄个点到多边形的切线的板子就过了。另外,询问最少数量的环上的区间是否覆盖了整个环可以用倍增。
  • K:首先两维独立,要算ans(t)为走t步在[1,n]之内的方案数。考虑两个算法。1.f(i,j)代表走了i步在j的概率,就是朴素的dp,复杂度O(tn)。2.考虑ans(t)=2·ans(t-1)-f(t-1,1)-f(t-1,n),计算f(t-1,1)可以用容斥,设L(i)为i关于0的对称点,R(i)为i关于n的对称点,g(i)为走到i的方案数,那么有f(t,1)=g(1)-g(L(1))-g(R(1))+g(R(L(1)))+g(L(R(1)))... 这部分每次对称距离会增加n,复杂度为O(t2/n)。 两种算法big small即可。
附加文件