UOJ Logo jiry_2的博客

博客

标签
暂无

UOJ Round #13

2016-04-01 16:58:19 By jiry_2

UOJ Round #13将于4月10日星期日晚上19:00举行!比赛将进行3个小时,共三道题。

这是UOJ第十三场UOJ Round。UOJ Round还是一如既往的省选及以上难度,欢迎大家来玩owo

1984年4月9日,日本建成了世界上第一座无人工厂。在此之后,人们对机器人、人工智能的研究经久不衰,并获得了许多喜人的成果。

就在最近,uoj 公司对外宣称他们已经成功的研发出了一种机器人 betacome,可以在任何方面任何领域战胜人类。在此之后,betacome 在很多领域与人类进行了角逐,并取得了全胜的战绩:它跳的比跳蚤国王高,跑的比香港记者快,填数独比JCVB熟练...

在取得了这样优秀的成果之后,uoj 公司觉得 betacome 已经拥有了挑战站在人类智慧的巅峰的男人——picks 博士的能力,于是他们公开发表了挑战书,并决定在2016年4月10日的晚上,展开这场人类智慧与人工智能之间的巅峰对决。

因此,这一场比赛将以 picks 博士与 betacome 之间的对(jiao)决(yi)为主题。

出题人:matthew99, PoPoQQQ, Stilwell

这场成绩将计入rating。

参加本次比赛将有机会获得 UOJ 抱枕!089258aecc9c8464b9ec6b6ecd0d5b13 是获奖条件的 md5 码。比赛结束后将公布条件。

再次提醒大家比赛中途只测样例,最后会进行最终测试,把所有提交记录重测。

UPD:比赛已经结束!

echo -n A题AC代码中跑的最快的,如果有多个取排名最高 | md5sum
089258aecc9c8464b9ec6b6ecd0d5b13

恭喜获得前 5 名的选手!

  1. hzt1
  2. srwudi
  3. cy
  4. Dr_Picks
  5. gao_r_q

恭喜 lostmemory 获得 UOJ 抱枕一个!(赛后rejudge过一次,以final test的结果为准)

关于 《Segment tree Beats!》 的一些问题

2016-03-03 10:46:17 By jiry_2

这几天重新研究了一下冬令营营员交流《Segment tree Beats!》的课件,发现课件里面 $O(n \log n)$ 部分的复杂度证明似乎是伪证。

QAQ

哇

然后这两天挣扎了好久,然而既没有找到 $O(n \log n)$ 的复杂度证明,也没有构造出DFS次数 $n \log^2 n$ 的数据。(目前构造出来的数据在 $n,m = 5 \times 10^5$ 范围内暴力 DFS 次数在 $10^7$ 级别..我已经把它加到 extra test 里面重测了。)

因为感觉我的姿势水平已经无法闷声修掉这个 bug 了,所以想了一想还是把这个事故公开出来,希望对这个问题有兴趣的老司机能够带带我 QAQ。

在这一波重测结束之后我会把这道题目重新公开出来供大家 hack(因为目前还没有找到 $5 \times 10^5$ 范围内跑不出来的数据,所以就暂时不修改数据范围了)。如果因为 Hack 数据的 10M 大小限制而无法提交的话可以直接来找我,我可以直接加到 extra test 里面进行重测。

如果有老司机能构造出 $n \log^2 n$ 级别的数据 hack 或者想出更好的复杂度证明请务必和我联系,不胜感激。

UOJ Round #12 题解

2016-02-28 19:27:08 By jiry_2

这里是写题面的 JRY,这一次的题面是不是很资慈呀 ( •̀∀•́ )。

因为之前在造比赛的时候 VFK 点名要让我来写题面,在感觉受宠若惊的同时为了不辜负 boss 的信任,当然要把题面写的生动有趣啦(笑)。

如果大家喜欢的话以后的题面里还是会继续这样写的 (*•̀ㅂ•́)و 。(当然前提是 VFK 还会再让我写题面)

最后插播一个小花絮,其实原来第三题的标题是长这样的:

嘿嘿嘿

后来因为它实在是太 ydcydc 了,所以就被无情的改掉啦 (╯°Д°)╯︵ ┻━┻。

公告

我们发现 613Chloe_fanxjt 这三位选手的 C 题代码,以及 Chloe_fanxjt 这两位选手的 A 题代码过于相似,经过管理员之间的讨论,我们决定取消他们这次比赛的参赛成绩。如果这几位选手存在异议,请在评论中提出。

希望各位参赛选手能以此为鉴,掌握开黑的正确姿势(雾),诚信比赛。

实验室外的攻防战

By matthew99

题解By C_SUNSHINE

算法一

我们建立 $n!$ 个点表示所有可能的排列,对于每个点次枚举交换哪两个,就能建出转移边,这样进行bfs就可以了判断 $A$ 状态是否能到达 $B$ 状态了。

这个算法能通过Subtask 1得到 $24$ 分。

不会bfs的戳这里

算法二

我们使用冒泡排序进行模拟,在交换时判断一下,如果经过 $n$ 轮之后仍然不能排成 $B$ 的样子,就输出 "NO"。

这个算法能通过Subtask 1~2得到 $56$ 分。

不会冒泡排序的戳这里

为什么这样是对的呢?因为自信!

算法三

我们可以猜一发结论,假设 $A_{a_i}=i,B_{b_i}=i$,一个显而易见的结论就是如果不存在 $1 \leq i < j \leq n$ 满足 $a_i < a_j且b_i > b_j$,则答案为"YES",否则为"NO"。 必要性十分显然,假设在 $A$ 中 $i$ 在 $j$ 前,而在 $B$ 中 $j$ 在 $i$ 前,那么一定有一个时刻 $i$ 和 $j$ 相邻且需要进行交换,而 $i < j$,无法交换,所以不可行。 充分性更加显然,考虑冒泡排序的过程,如果存在某一次交换 $i,j$ ($j$紧邻在$i$后面)两个元素时由于 $i < j$ 而无法交换,则一定出现了违反上述必要性的情况,这个命题的逆否命题就是充分性的证明。

那么我们怎么判断是否存在这样的 $i,j$ 呢?

我们按照编号从小到大枚举 $j$,并统计满足 $a_k < a_j$ 的所有 $k$ 中 $b_k$ 最大的值 $b_i$ ,如果$b_i > b_j$ 则说明这种情况出现了。判断完 $j$ 之后,用 $b_j$ 更新位置 $a_j$ ,用树状数组维护前缀和就好。

这个算法能通过全部Subtask得到 $100$ 分。

不会树状数组的戳这里

密码锁

By matthew99

得分情况

一个字形容——惨

49分——SanSiroWaltzBillXu2000

26分——xuhaike

19分——很多人

0分——很多人

算法一

对于subtask1,我们可以枚举每条边的定向,然后暴力求出强连通分量数。

什么你说你不会求强连通分量数?直接floyd跑一遍求传递闭包,把所有的互相能到达的点都缩起来就可以了。当然你也可以BFS。

如果使用$O(n + m)$的求强连通分量的算法,比如tarjan算法,则时间复杂度为$O(2 ^ m (n + m))$,期望得分19分。

算法二

懂逆元的同学都应该知道模意义下统计一个东西的概率,我们可以先统计出强连通分量数的期望,最后乘上$10000 ^ {n(n - 1)}$的数即可。如果不知道逆元可以参考维基百科。可以算出$10000$在模$998244353$下的逆元为$796898467$。

注意到定向后的图是个有向完全图,即竞赛图,竞赛图的强连通分量缩点之后,一定是一个链状的图,满足每个点和后面的点都有连边。

如何统计答案呢,设这张图为$G(V, E)$,注意到答案即为链的长度,链的长度的统计可以转化为链的前缀的数量减一,这条链的前缀显然就是一个点集$S \subset V$,满足所有的$S$与$V - S$之间的连边都是从$S$中的点连出去的,我们定义这样的点集为割集(只是这篇题解中临时引入的定义),那么我们统计割集数量即可。

暴力枚举所有可能的点集$S$,然后直接计算所有$S$与$V - S$之间连边为$S$连出的概率,最后乘起来。

时间复杂度$O(2 ^ nm)$,期望得分42分。

算法三

妈妈我会数学!

对于$m = 0$的情况,大小相同的点集是割集的概率是相同的,对每一种大小的点集很容易计算出该概率以及这种大小的点集的个数,直接统计答案即可。

时间复杂度$O(n)$,期望得分7分,结合前面的算法可以获得49分。

算法四

对于后面的数据,我们发现m比较小,因此最好能想出一个在指数意义上和n无关的算法。

对于一个点集,它是割集的概率无非就是这个点集中的点与点集外的所有点的所有连边都是从这个点集连出去的概率,也就是每条边是连出去的概率乘起来。对于概率非0.5的边我们称其为特殊边,对于大小为$x$的点集,如果其中没有任何特殊边则是割集的概率为$0.5 ^ {x(n - x)}$,如果其中存在一条特殊边,设这条边从$x$连出的概率为$P$,那么这个概率要乘上$2P$,也就是这个特殊边的贡献。我们不妨统计出每个大小的连通块,其中所有特殊边的贡献,最后对每个大小的连通块乘上$0.5 ^ {x(n - x)}$再加起来即可。

一个想法就是枚举有贡献的边的集合,如果一条边有贡献,那么它的两个端点必然有且仅有一个在$S$中,那么我们可以考虑黑白染色,如果染色失败那么一定不存在这种情况,否则我们对于某个连通块,要么黑点在$S$中,要么白点在$S$中,并且每种情况的贡献都容易算出,所以我们通过一个$O(n ^ 2)$的类似背包问题的DP,即可算出每种大小的连通块的贡献总和。

时间复杂度为$O(2 ^ m n ^ 2)$,期望得分73分。

算法五

我们发现之前的复杂度在于背包DP上,对什么进行背包DP呢,对每个连通块进行背包DP,等等你说每个连通块?

一个连通块,如果有$m$条边,那么最多有多少个点,$m + 1$个!我们可以对每个连通块直接枚举哪些点在$S$中,然后计算贡献,最后再来一次类似背包的DP。于是这题就被我们愉快的解决了。代码又短又优美,不比19分的暴力要长。

时间复杂度为$O(2 ^ {m + 1}n + n ^ 2)$,期望得分100分。

a^-1 + b problem

By shanquan2

题解By jiry_2

算法一

直接暴力模拟整个过程,逆元可以通过费马小定理用快速幂求,也可以直接用扩展欧几里得求,这两个方法都是单次 $O(\log n)$的。

时间复杂度 $O(nm \log n)$,期望得分 $10$ 分。

算法二

当没有求逆元操作的时候,我们可以直接更新总和:整体加上 $x_i$ 相当于给总和加上了 $n \times x_i$。直接更新就行了。

时间复杂度 $O(n+m)$,结合算法一期望得分 $20$ 分。

算法三

对于集合中的一个数,我们考虑若干次操作之后它会变成什么。显然每一时刻,都存在常数 $a,b,c,d$,使得原来数列中的每一个数 $A[i]$,它都变成了 $\frac{aA[i]+b}{cA[i]+d}$

于是问题就转化成了,每一次给出一个函数 $f(x)=\frac{ax+b}{cx+d}$,求 $\sum_{i=1}^n f(A_i)$。

当 $c=0$ 的时候,我们可以直接求和,因此接下来假设 $c \neq 0$。

首先,我们可以把 $f(x)$ 给表示成 $f(x)=e+f \times \frac{1}{x+g}$,于是我们只需要考虑求原来的所有数加上某一个数 $k$ 后的倒数和就行了。

因为 $\prod_{i=1}^n (A_i+k)$ 我们可以 $O(n)$ 求出,所以我们可以先给答案乘上这个值,于是我们就只需要求 $\sum_{i=1}^n \prod_{j \neq i}\ (A_j+k)$,不难看出这个也是可以 $O(n)$ 求出来的,这样我们就可以避免掉求逆元的 $O(\log n)$ 啦。

当然,这个做法想要拿到 $50$ 分的话需要加一点常数优化,其中一个方法是:我们可以发现本质不同的询问最多只有 $\frac{m}{2}$ 次,所以可以去掉重复的询问。

时间复杂度 $O(nm)$,期望得分 $30$ 至 $50$ 分。

算法四

考虑优化算法三。考虑算法三中 $O(nm)$ 的部分,第一个地方是求 $\prod_{i=1}^n (A_i+k)$,第二个部分是求 $\sum_{i=1}^n \prod_{j \neq i}\ (A_j+k)$。

先考虑第一个地方,我们构造多项式 $g(x)=\prod_{i=1}^n (A_i+x)$,那么第一部分就相当于给出了若干次询问 $k$,求 $g(k)$ 的值。这是一个经典的多项式多点求值问题,可以用多项式除法解决。至于 $g(x)$ 我们可以通过分治 FFT 得到。

第二个地方的处理方法类似,我们构造多项式 $h(x)=\sum_{i=1}^n \prod_{j \neq i}\ (A_j+x)$,那么也就变成多点求值问题啦。不难发现 $h(x)=g'(x)$,所以在求出 $g(x)$ 之后 $O(n)$ 求一下导就能得到 $h(x)$ 啦。

这样我们就得到了一个 $O((n+m) \log^2 n)$ 的算法,期望得分 $70$ 至 $100$ 分。

UOJ Round #12

2016-02-21 17:12:32 By jiry_2

UOJ Round #12将于2月28日星期日晚上19:00举行!比赛将进行3个小时,共三道题。

这是UOJ第十二场UOJ Round。UOJ Round还是一如既往的省选难度,欢迎大家来玩owo

1995年2月28日,美国费米实验室宣布,发现物质组成中第六种、也是最后一种夸克——顶夸克。

但是,著名的物理学家 picks 博士,坚信着宇宙中隐藏着第七种夸克,只要集齐了这七种夸克,它们将会(召唤神龙)发挥出超乎想象的力量。

于是,为了找到这一种夸克,他付出了无数的心血。功夫不负有心人,就在最近,他终于发现了他预言的第七种夸克——他将它命名为跳蚤夸克。经过研究,他发现可以利用跳蚤夸克蕴含着的能量制造出传说中的武器——阿姆斯特朗回旋加速喷气式阿姆斯特朗炮——它有着颠覆一切的力量。

然而,这一划时代的研究成果传入了邪恶组织 UOJ 的 boss 伏特跳蚤国王的耳中。于是,他打算在2016年2月28日,发动组织中无数的跳蚤士兵们绑架 picks 博士,得到这一武器并最终统治世界。

因此,这一场比赛将围绕 picks 博士与伏特跳蚤国王的故事展开。

出题人:matthew99, matthew99, shanquan2

这场成绩将计入rating。

参加本次比赛将有机会获得 UOJ 抱枕!555cfd543fe7b88a643a9a759d0dcc0e 是获奖条件的 md5 码。比赛结束后将公布条件。

再次提醒大家比赛中途只测样例,最后会进行最终测试,把所有提交记录重测。

UPD:比赛已经结束!

echo -n A题ac代码中最长的,如有多个取排名最高的 | md5sum
555cfd543fe7b88a643a9a759d0dcc0e

恭喜获得前 5 名的选手!

  1. SanSiroWaltz
  2. BillXu2000
  3. xutangbo
  4. mjy0724
  5. zxozxo

恭喜 function843 获得 UOJ 抱枕一个!

【广告】UOJ上又有新题啦

2016-01-03 22:13:30 By jiry_2

唔..如大家所见,UOJ 上多了一道叫做 Picks loves segment tree VIII 的题。

其实嘛...本来这次 UR 的 C 是这题,但是我嫌数据太难造标程太难写,所以就删掉了两个操作..

本来以为能做这次 UR 的 C 题的算法改一改都能过这题..结果好像并不是这样?

于是我又花了一点时间把这题出了出来放了上去..

因为比较难写,所以我也不知道我的程序到底有没有写对..大致,应该是和暴力拍上了。

因为数据比较难造,所以我就直接拿这次UR的C题的数据改了一改再加上了一些随机数据...卡掉 WA 的算法应该是没有什么问题,但是对一些复杂度玄学的算法可能就无能为力了 QWQ 反正等到有这样的算法通过了我再尝试来卡吧...

不过好像标算的常数也是大的惊人..明明是 $O(n\log n)$ 的做法,却跑出了 $O(n\sqrt n)$ 的效率我也是挺服气的...

可能有人会问为什么这题的编号是 VIII,其实就是字面意思,这题前面还有七题,恩..都是我营员交流的例题..有些是傻逼题但也有比这题难的..本来想都放到 UOJ 上但是写起来实在是有点累,再加上好像拿来骗钱也不错,所以就只放了这题。(怎么话说来说去又来给你的傻逼营员交流打广告了(╯‵□′)╯︵┻━┻)

恩..大致也就说这么多了..祝大家切题愉快owo

UOJ Round #11 题解

2015-12-31 14:57:39 By jiry_2

2016,好好做人。

如大家所见这场 round 比往常的 UR 都要难一点...因为考虑到下一次正式比赛是 WC,所以就放了比较难的题目当做是给大家 WC 的赛前模拟啦。

[Upd] C题的题解可以戳这里

元旦老人与汉诺塔

By jiry_2

算法一

可以发现每一个状态下你能进行的操作最多只有 $3$ 种,所以可以直接搜索每一步的选择然后判断是否和目标状态相同。

时间复杂度 $O(3^mn)$,期望得分 $30$ 分。

算法二

输入格式有一定的启发作用,可以发现汉诺塔的合法状态只有 $3^n$ 种,我们开一个数组进行 DP,状态是当前的步数以及状态,然后直接转移就好了。

时间复杂度 $O(3^nm)$,结合算法一期望得分 $50$ 分。

算法三

嗯..把算法二改成记忆搜就好了。

时间复杂度 $O(3^nm)$,期望得分100分。

讲道理

为了避免这道题被贴上“玄学题”的标签,接下来我们来讲讲道理。

因为存在一种叫做 meet in middle 的东西,我们可以分别从 $S$ 和 $T$ 出发搜 $\frac{m}{2}$ 步,之后再合并,所以接下来我们分析的时候就当做 $m \leq 50$。然而实际上这玩意根本没有什么卵用,所以标算并没有加上这个优化。

考虑每一座塔,如果我们要移动它的第 $i$ 个盘子,那么我们必须先把前 $i-1$ 个盘子移动到另外的某一根柱子上,最后再把这个盘子放到最后剩下的柱子上。即使不考虑其他两根柱子上原有的盘子的影响,我们也需要 $2^{i-1}$ 次移动。

因为有 $m \leq 50$,所以我们最多只能移动到每一根柱子上的第 $6$ 个盘子。因此可能发生移动的盘子最多只有 $18$ 个,在整个过程中汉诺塔能够达到的状态最多只有 $3^{18}$个。这样我们就得到了一个状态数的上界:$3^{18}m$,大约在 $2 \times 10^{10}$左右。

换一种方式分析可以得到更好的结果。考虑这样的一个汉诺塔:第一根柱子上有 $6$ 个盘子,剩下两根柱子上都没有盘子。我们对每一个 $i \in [0,m]$ 用 BFS 预处理出这个汉诺最少需要 $i$ 步达到的状态数 $d[i]$,那么原问题的状态数一定不超过 $\sum_{i+j+k \leq m} d[i]d[j]d[k](m-i-j-k)$。这个式子的含义是:我们枚举每一个柱子上的盘子最后的状态,然后用它们分别在不考虑另外两根柱子的情况下达到这个状态的步数之和当做三个柱子同时存在时的最短步数(因为前者一定小于后者所以这样只会增加统计到的状态数),把汉诺塔每一个状态对记忆搜时的状态数的贡献累加起来就可以对状态数得到一个估计。这个式子的结果好像是在 $10^7$ 到 $10^8$ 之间,已经是可以接受的范围了。

上述的分析都使用了不同程度的放缩,实际上的状态数远少于分析出来的状态数:用算法三直接进行记忆花搜索的时候状态数只有 $10^5$ 级别。如果有老司机能分析出更低的上界,欢迎来和我讨论。

其他

大家可以发现这一场的数据非常良心..

测试数据都是随机的,我只在ex数据里加入了一些构造数据。

而且,大家仔细一点就可以发现,最后两个样例的输出是一样的,这是一个非常重要的提示owo不知道大家有没有看到呢。

总而言之这题还是非常良心的是吧..我也不知道为什么,如果我不拿出点实际行动,总有人以为我是毒瘤。[手动滑稽]

元旦老人与丛林

By shanquan2

题解By jiry_2

算法一

直接枚举每一个可能的边集进行判定。时间复杂度 $O(2^mm)$,期望得分 20 分。

算法二

我们在一棵树上加了很少的边,于是我们可以考虑把这张图上无用的点和边给删掉。

可以发现度数小于等于 $2$ 的点是否存在是没有影响的,因为在删掉这个点以及它连出去的所有边之后,如果新图不是丛林,那么原图一定也不是丛林;反之如果新图是丛林,我们可以把新点分别加到两棵森林中:一条边就随便挑一颗森林连进去,两条边就分别连到两棵森林中,这样得到的就是原图拆分成两棵森林的方案,所以原图也是丛林。

于是我们可以每一次找一个度数小于等于 $2$ 的节点把它删掉,那么我们可以最后剩下的图的边数很少(和 UER#4 C 题类似),直接暴力枚举就好了。期望得分 40分。

算法三

观察第三个 subtask,因为每一个点的度数都不小于 $4$,所以可以得到 $m \geq 2n$,显然是无解的,只要输出 No 就能得到这 $10$ 分啦。

算法四

实际上第三个 subtask 是拿来提示标算的。我们可以发现如果原图存在一个非空子图满足 $|E| > 2|V|-2$,那么显然无解。实际上存在这样的一个结论:如果图 $G$ 的每一个非空子图都满足 $|E| \leq 2|V|-2$,那么它一定是丛林。接下来我们来考虑证明这一个结论:

尝试归纳法,当 $n=1$ 的时候,这张图一定是丛林。

假设所有点数小于 $n$ 的满足结论中条件的图都是丛林。现在,我们来考虑一张 $n(n>2)$ 个点的满足条件的图 $G$,令它度数最小的节点为 $u$,那么 $u$ 的度数只可能为 $0,1,2,3$(原因见算法三)。其中当 $u$ 的度数小于等于 $2$ 的时候,可以用算法二中的方法进行构造。所以我们只考虑 $u$ 的度数是 $3$ 的情况。

对于一个非空子图,如果满足有 $|E|=2|V|-2$,那么我们就把它称作是满的子图。

引理一:对于图中任意两张相交(至少存在一个公共点)的满子图,那么它们的并也一定是满的。

证明:假设这两个子图分别是 $(V1,E1),(V2,E2)$,令 $V3=V1 \cap V2,E3=E1 \cap E2,V=V1 \cup V2,E=E1 \cup E2$,那么 $(V3,E3),(V,E)$ 一定都是原图的子图,我们需要证明的是 $|E|=2|V|-2$。

因为 $|E| \leq 2|V|-2$,所以 $|E1|+|E2|-|E3| \leq 2(|V1|+|V2|-|V3|)-2$,又有$|E1|=2|V1|-2,|E2|=2|V2|-2$,所以 $-|E3| \leq 2-2|V3|$。

又因为有 $|E3| \leq 2|V3|-2$,所以可以得到 $|E3|=2|V3|-2$,因此 $|E|=2|V|-2$。

接着,设和 $u$ 相连的三个点分别为 $a,b,c$。令 $G$ 在删掉 $u$ 以及那三条边之后的图是 $G1$,由假设,$G1$ 是丛林。

引理二:$a,b,c$ 中至少存在一对节点 $(x,y)$,使得 $G1$ 中不存在同时包含 $x$ 和 $y$ 的满子图。

证明:考虑反证法,假设存在分别包含 $(a,b),(a,c),(b,c)$的满子图,由引理一,我们可以把这三个图并起来,这样就得到了 $G1$ 的一个同时包含 $(a,b,c)$ 的满子图。我们把删掉的 $u$ 和那三条边加入这张子图中,这样就得到了 $G$ 的一个子图。此时这个子图满足 $|E|=2|V|-1$,矛盾。因此引理二得证。

于是,我们可以在 $G1$ 中加入一条连接 $(x,y)$ 的边得到 $G2$,不难发现 $G2$ 依然满足结论中的条件,所以 $G2$ 也是丛林。我们可以构造出 $G2$ 拆分成的两棵森林,其中一定有一颗包含了新加入的边 $(x,y)$,我们删掉这条边,然后再这棵森林中加入边 $(u,x),(u,y)$,再把最后剩下的一条边加入另一棵森林中,于是就得到了 $G$ 拆分而成的两棵森林。所以 $G$ 是丛林。

到此,我们就愉快的证明了这个结论辣owo

于是问题就转化成了判断当前的图是否存在一张非空子图满足 $|E|>2|V|-2$。这个问题可以转化成最大权非空闭合子图:

新建一张 $n+m$ 个点的图 $G3$,其中前 $n$ 个点的权值是 $-2$,后 $m$ 个点的权值是 $1$。如果在 $G$ 中第 $i$ 条边连接的点是 $u_i$ 和 $v_i$,那么就分别连上 $i+n$ 到 $u_i$ 和 $v_i$ 的边。我们只需要判断 $G3$ 的最大权非空闭合子图的权值是否大于 $-2$ 就好啦。

当然直接当做最大权闭合子图来做是不行的,因为当最大权非空闭合子图的权值小于 $0$ 时,最大权闭合子图的权值就是 0。

我们可以强制选取某一个点,即把某一个点的权值设为 0。这样如果存在一个包含这个点的子图满足 $|E|>2|V|-2$,那么这个子图的权值就变得大于 $0$ 了。我们可以枚举这个点,跑 $n$ 次网络流,这样就能检验辣。

如果你使用 dinic 的话,因为这张图是二分图,所以时间复杂度 $O(nm \sqrt n)$,期望得分 80 分。

算法五

其实优化起来很简单,我们发现相邻两次最大流之间只有两条流量为 $2$ 的边发生了变化,所以直接用退流搞就好啦。

时间复杂度 $O(\sqrt n m+nm)$。

其他

在比赛中 myy 大致猜到了这题的结论,但是可惜的是他用最大权密度子图来判断了QAQ于是就非常遗憾的 FST 了。[手动蜡烛]

元旦老人与数列

By xyz111jiry_2

严格上来讲这道 C 题的难度并没有 B 题高,但是因为是一些黑科技,所以就放到了 C 题。

因为这题是我们营员交流的一道例题,所以在 WC 之前我就先不放题解了,给我们的营员交流留一丝悬念,希望大家谅解qwq

对这题有兴趣的同学可以看一下 2015 年多校第二场中的 Gorgeous Sequence 一题获得一些启发owo

UOJ Round #11

2015-12-24 20:07:48 By jiry_2

UOJ Round #11将于1月1日星期五晚上19:00举行!比赛将进行3个小时,共三道题。

这是UOJ第十一场UOJ Round。UOJ Round还是一如既往的省选及以上难度,欢迎大家来玩owo

每年圣诞期间,著名的大坏蛋圣诞老人都会开始横行,威胁着生活在地球表面的人类的生命安全。

但是就在去年,主张正义、维护世界和平的元旦三侠:生蛋侠、圆蛋侠、零蛋侠联合了起来并展开了积极的行动,在经历了艰苦卓绝的战斗之后,终于赶走了大坏蛋圣诞老人。

然而新的问题又出现了:今年圣诞节几乎全世界的小(熊)朋(孩)友(子)都没有收到礼物!一时间世界各地都响彻着小(熊)朋(孩)友(子)们的哭闹声,严重的威胁到了世界的和平与安宁。

在这历史的风口浪尖,正义的使者——元旦老人站了出来,拯救了世界!

传说,在元旦前夕,如果你在睡觉前把礼物挂在床头,那么,第二天早上醒来,你就会发现礼物...

被装在了袜子里面!

因此,这一场比赛将以元旦老人为主题。

出题人:jiry_2, shanquan2, xyz111

这场成绩将计入rating。

参加本次比赛将有机会获得 UOJ 抱枕!e50fedfa7626fecfe095c634ef076624 是获奖条件的 md5 码。比赛结束后将公布条件。

再次提醒大家比赛中途只测样例,最后会进行最终测试,把所有提交记录重测。

UPD:比赛已经结束!

echo -n 前10中赛后rating对11取模后最大的,如有多个则取排名最高 | md5sum
e50fedfa7626fecfe095c634ef076624

恭喜获得前 5 名的选手!

  1. r_64
  2. bright_sun
  3. xiqiao
  4. dogther
  5. gao_r_q

恭喜 shdut 获得 UOJ 抱枕一个!

UOJ Round #10 题解

2015-12-04 10:20:06 By jiry_2

这里是第一次造UR的JRY。

因为我根本不会抽代,所以把第三题题解写成了民科状物体,请大家轻喷..

我已经累的说不出其他感想了..等清华集训结束以后一起写在我的博客上吧..

[upd]A题 $O(n \sqrt n)$ 做法现已加入豪华午餐。

汉诺塔

By vfleaking

题解 By C_SUNSHINE

算法1

假设我想让最后所有的圆盘都在第三根柱子上。

那么我们可以把第一根柱子上的圆盘依次取下来放到第二根柱子上,碰到编号为$n$的圆盘就拿出来放到第三根柱子上。

然后我们再把第二根柱子上的圆盘依次取出来放到第一根柱子上,碰到编号为$n-1$的圆盘就拿出来放到第三根柱子上。

……

如此循环往复就可以了。

操作数复杂度$O(n^2)$,时间复杂度$O(n^2)$,可以得到$60$分。

算法2

$O(n^2)$的算法没有前途,我们来考虑分治。

假设第一根柱子上有编号为$[l,r]$的乱序的元素。我们把这根柱子上的圆盘依次取出,编号不超过$mid=\frac {l+r} 2$的圆盘放到第二根柱子上,否则就放在第三根柱子上。

然后我们对第二根和第三根柱子上新加入的若干个圆盘进行逆序排序,可以发现这是一个以另外两根柱子为第一根柱子的规模更小的子问题,可以递归解决。

假设我们要按照从顶到底递增的顺序排列,我们就先把第二根柱子上的圆盘依次移动回第一根柱子,再把第三根柱子上的圆盘移回来,否则就先移回第三根柱子上的圆盘。

操作数复杂度$O(nlogn)$,时间复杂度$O(nlogn)$,可以得到$100$分。

算法3

应广大群众的要求,我来补上 $O(n \sqrt n)$ 的做法的题解啦。

因为我自己也没有写过,所以具体的实现方法我也不知道啦...大致的思路就是每一次,我们从汉诺塔中把最小的 $\sqrt n$ 个数给移到最顶上,然后把它们排序,最后把这些数塞到最底下不考虑。这样的操作次数是 $O(n \sqrt n)$ 的,但是这种实现方式的常数可能偏大,可能需要卡卡常数才能过。

世界线

By xllend3

算法一

经过人类智慧,可以发现 $n=4$ 时只需要第一次 $1-2$ 第二次 $2-3$,那么四个点就都区别开了。

$n=5$ 时连边是 $1-2,3-4$ 和 $2-3,4-5$。首先可以判断出 $1$ 和 $5$,然后就可以顺着推出 $234$

可以通过 1,2 两个点获得 20 分。

算法二

观察一下 $n=4$ 和 $n=5$ 的解,发现这种解可以拓展到 $n$ 更大的情况。即连成一条链,先判断出最边上的点,然后顺着往里推推出剩下的点。

由于一个点只会和另外的一个点连边,所以期望要询问 $O(n)$ 次,那么询问次数为 $O(n^2)$。

可以通过 1,2,3,4 获得 40 分。

算法三

如果想减少询问次数,其实就是减小块数。因为询问的复杂度是块数乘 $n$ 的(只需要对于每个块扫一遍所有的点即可)。

由于两次块数之积不能小于 $n$ (否则两个点两次都在同一块怎么看出来是谁呢),所以块大小之和最小只能到根号范围。

那么重点就在于怎么鉴定哪些块是哪些块。使用块大小来鉴别是一个不错的办法。

对于第5个点和第7个点,注意到 $n$ 满足 $n=\frac{k \times (k+1)}{2}$,那么将所有的数排列在 $k \times k$ 的网格图(点 $(i,j)$ 在网格图中当且仅当($1\leq i,j\leq n)$)中满足 $i\leq j$ 的位置,第一次将 $x$ 相同的归为一组,第二次将 $y$ 相同的归为一组。那么通过每个点每次所在的块的大小就可以轻松判断出这个点是谁。

结合前面可以通过1,2,3,4,5,7获得60分。

算法四

假如 $n$ 不能表示成 $\frac{k \times (k+1)}{2}$,那么块大小分法就无效了,因为怎么分都会有两个块大小相等。这时候就要想别的办法了。

还是按照上面的方法排列这些点,多出来的部分排在 $k+1$ 行的前几个位置。那么纵向的块大小已经两两不同了,只有横向有两个块相同,那么只需要区分它们就行了。

那么将最后一行的最后一个点拿出来,移到 $(k+1,k+1)$,询问的时候首先找出这个点的位置就可以区分这两个块了。

由于纵向只有 $(k+1,k+1)$ 和 $(k,k)$ 两个两个点,所以直接根据这两个块的大小区分即可。

注意到这样做在 $n=\frac{k \times (k+1)}{2}-1$ 时会由于横向最后两个块大小相同而无法区分,所以过不了后三个点。

结合前面可以通过1,2,3,4,5,6,7获得70分。如果懒得特判前两个点就只有60分了。

算法五

既然 $n=\frac{k \times (k+1)}{2}-1$ 会挂那就不拿最后一个点,随便拿一个其他的,那它不就成了唯一一个大小为1的了吗?于是就可以愉快地解决 $n=\frac{k \times (k+1)}{2}-1$ 的情况。

但是等一等让我们算算询问次数:$n\sqrt{2n}=2800000$。所以还是过不了后三个点T_T

算法六

接下来就是精彩的卡常时间!

由于每次询问之后已经被归到某一块的点显然是可以不用再次询问的,于是把已经归类的都删掉,你就获得了一个 $0.4$ 的常数!

为啥常数这么奇怪呢?因为随机排列后期望选到的是更大的块,所以大块会更有可能被优先删掉。于是就小于 $0.5$ 辣!

可以通过所有测试点!(手动鼓掌熊)

算法七

那么还能继续优化吗?

假如刚开始就能知道这个块大不大那不就可以不用拼脸了吗?也就是说需要优先判断可能最终比较大的块。

那么考虑换一种询问方法:不枚举块,而是枚举每个元素,尝试将它归入现在存在的块中,假如归不进那么就新开一块。

假如尝试的顺序就是块出现的顺序的话容易发现两种做法的询问次数是一样的。但是我们可以不按它出现的顺序来!可以按照当前块大小从大到小询问!

这种做法大概可以优化掉10%左右的询问次数。这样就不怕其他人凭借欧洲人的优势抢走抱枕辣!

算法八

由于每个询问成功地概率基本都是小于 $0.5$ 的,所以每次挑选成功概率最大的询问就可以获得最多的信息量。 假如一个点已经被得知不和某些点连通,那么它跟其他点连通的概率就会大不少,也就是说不停地询问一个点直到确定他的位置已经是一种非常不错的选择了,也就是说改变这里的优化余地并不是很大。 那么接下来的问题就是判断属于哪个块的概率更大。注意到假如有一个块是 $k-2$ 一个块是 $k-1$,那么属于 $k-2$ 的概率显然要高于 $k-1$ 的概率,也就是说直接从大到小询问并不是最优的策略,可能从中间开始询问更优。那么就需要算出每个块的期望大小,根据期望大小和实际大小的差来确定询问先后。

由于每个块的期望大小并不能那么快地算出来,所以就需要使用比较精确的估价函数来估价(然而这样看起来还是有点困难)。不过应该可以打表?

于是我也不知道怎么继续优化了。欢迎使用更厉害的算法艹算法七。

列队

By sevenkplus

题解 By jiry_2

算法一

我们暴力枚举所有可能的指令集合,然后判断一下它是不是符合 picks 博士的构思即可,时间复杂度大约是 $O(Tn!^m)$,加一些剪枝就能拿到20分了。

算法二

相信大家都能看出这是一个和群有关的问题,可以发现一个完善的指令系统一定是一个群。观察第三个点和第四个点的部分分,可以发现这个时候给出的群 $G$ 是一个循环群,即这个群是由某个置换 $P$ 的幂次形成的。

因为 $|G|=m$,所以置换 $P$ 的阶数是 $m$,可以发现阶数为 $m$ 的置换和群 $G$ 是一一对应的,那么问题就转化为了求阶数为 $m$ 的置换的个数。

假设一个置换的循环个数为 $k$,每一个置换的长度为 $A_i$,那么显然这个置换的阶数是 $\text{lcm}(A_i)$,我们可以用 DP 来求解阶数为 $m$ 的循环个数。

令 $dp[i][j]$ 为长度为 $i$,阶为 $j$ 的置换的个数。转移的时候,我们可以枚举编号最大的元素所对应的循环大小 $k$,这个循环的形态一共有 $(k-1)!$ 种,而这个循环内除了编号最大元素以外的元素的选取方法有 $\binom{i-1}{k-1}$ 种,因此就可以得到递推式:

$dp[i][j]=[\text{lcm}(a,k)=j] \times dp[i-k][a] \times \binom{i-1}{k-1} \times (k-1)!$

暴力转移一波,时间复杂度是 $O(nm^3)$ 的,结合一下算法一就能得到 $40$ 分了。

算法三

这题给定了一个群 $G$,实际上是要求 $G$ 到 $S_n$ 的单同态的个数。

考虑同态 $f: G \rightarrow S_n$,令 $K=\text{ker} \ f$,那么我们要统计的就是 $K=\{1\}$ 的同态 $f$ 的个数。因为有 $G/K$ 同构于 $\text{im} \ f$,所以满足 $\text{ker}\ f=K$的同态 $f$ 的个数等于 $G/K$ 到 $S_n$ 的单同态个数。

因此我们可以枚举 $G$ 的所有阶大于1的正规子群 $H$,那么 $G$ 到 $S_n$ 的单同态个数就等于 $G$ 到 $S_n$ 的同态个数减去 $G/H$ 到 $S_n$的单同态个数。那么如果我们能求出 $G$ 到 $S_n$ 的同态 $f$ 的个数,就能递归到规模为 $|G|/|H|$ 的子问题了。

到这儿问题就转化成了给定一个群 $G$,求 $G$ 到 $S_n$ 的同态的个数。

令 $H$ 是 $G$ 的一个指数为 $K$ 的子群,那么 $G/H$ 中含有 $K$ 个元素。用 $1$ 到 $K$ 给这 $K$ 个元素编号,固定 $H$ 的编号是 $1$,那么显然有 $(K-1)!$ 种编号方式。同时,可以发现仅存在一个 $G$ 在 $G/H$ 上的作用,我们把这个作用中 $G/H$ 中的元素都用它的编号来代替,那么就可以得到一个 $G$ 到 $S_K$ 的同态,因此,通过这种方式,一个指数为 $K$ 的子群 $H$ 就给出了 $(K-1)!$ 个 $G$ 到 $S_K$ 的同态。

考虑这样的同态满足怎么样的特性,可以发现这样同态 $\phi$ 满足,所有固定了排列中的 $1$ 的元素恰好组成了 $H$ 且 $\text{\phi}$ 在 $1$ 到 $n$ 上是可迁的。我们令这样的同态的个数为 $t_K$,阶为 $K$ 的子群个数为 $a_K$,根据上一段的分析可以得到 $a_K=\frac{t_K}{(K-1)!}$。

现在考虑 $G$ 到 $S_n$ 的同态 $f$,我们枚举这个同态中 $1$ 的轨迹的大小 $K$,那么轨迹集合就有 $\binom{n-1}{K-1}$ 种,而 $G$ 在轨迹集合上的作用有 $t_K$ 种(因为这一部分一定是可迁的),把 $1$ 的轨迹去掉之后就得到了一个 $n-K$ 规模的子问题,因此我们就得到了一个递推式(令 $h_K$ 为 $G$ 到 $S_n$ 的同态的个数):

$h_n=\sum_{i=1}^n\binom{n-1}{k-1} \times t_k \times h_{n-k}$

把 $t_k$ 用 $a_k$ 带入即可得到一个能算的递推式啦..具体实现的时候就直接按照定义搜搜搜算算算就行啦..$m \leq 30$ 的数据范围无论是子群还是正规子群的个数都不多,直接暴力递归子问题什么的就好了。

UOJ Round #10

2015-11-30 13:48:33 By jiry_2

UOJ Round #10将于12月4日星期五晚上19:00举行!比赛将进行3个小时,共三道题。

这是UOJ第十场UOJ Round。UOJ Round还是一如既往的省选及以上难度,欢迎大家来玩owo

因为上次UER的难度被大家吐槽了,所以这次的题目经过我们的重重把关,保证好玩有趣owo敬请期待。

1639年12月4日,英国天文学家霍罗克斯第一次用天文望远镜观察到金星凌日。

知名的天文学家 picks 博士夜观天象,发现如今 OI 界世风日下的原因,正是2012年那次轰轰烈烈的金星凌日。为了挽救中国 OI 界于水火之中,他决定通过时间机器回到 2012 年,成为马猴烧酒拯救世界!

因此,这一场比赛将以金星凌日为主题。

出题人:vfleaking, xllend3, sevenkplus

这场成绩将计入rating。

参加本次比赛将有机会获得 UOJ 抱枕!35ad6535c94e199c3d8170d726ec5bb6 是获奖条件的 md5 码。比赛结束后将公布条件。

再次提醒大家比赛中途只测样例,最后会进行最终测试,把所有提交记录重测。

UPD:比赛已经结束!

echo -n 全场第三名 | md5sum
35ad6535c94e199c3d8170d726ec5bb6

恭喜获得前 5 名的选手!

  1. gonens
  2. owaski
  3. matthew99
  4. zxozxo
  5. NanoApe

恭喜 matthew99 获得 UOJ 抱枕一个!

UOJ Easy Round #5 题解

2015-11-01 21:41:58 By jiry_2

大家好,这里是第二次参与造比赛工作的jiry_2..

承蒙大家的厚爱,在UOJ一周年零一个礼拜之际,参赛人数创历史新高啦owo

这次的UER好像又造的有点偏难了?不过讲道理这已经比上一场UER简单了很多了吧..

因为有很大一部分内容是JRY熬夜意识模糊下的产物,所以出现了什么纰漏也请大家多多包涵QAQ

[upd]因为A题题解写的比较仓促所以题解写错啦QAQ现在已经更正

[upd]感谢数学迷 nneztlk 提供C题等式的组合解释owo

[upd]A题题解的公式一个变量打错啦..现在已经更正。

[upd]A题中点数为 $300860$ 的数据已由 lll6924 构造出。

QAQ

万圣节的南瓜灯

By Picks

算法一

原问题相当于判断删除一些格子后的网格是否是一棵树。所以我们可以直接把图建出来然后用并查集来判断。

时间复杂度 $O(nm \alpha(nm))$,期望得分50分(多良心)。

算法二

可以发现当 $nm$ 很大的时候,这个网格一定不是一棵树。因为树满足点数恰好比边数大1,所以就存在不等式:

$$ nm-K > 2nm-m-4K $$

即 $nm < 3K+m$,所以在 $nm > 4 \times 10^5$ 的时候就可以直接输出 No 了,否则就用算法一来暴力判断。

注:$nm=3 \times 10^5$ 的 Yes 数据可以用如下方式构造:$n=10^5,m=3,K=10^5$,所有满足 $x \equiv y \pmod{3}$ 的格子 $(x,y)$ 被破坏了。$nm=3 \times 10^5 +1$的数据已经由 bzoj构造出,如果能早出更大的数据请直接联系我,我会把它添加到题解以及extra test中,谢谢。

万圣节的数列

妹红多萌啊!

大家好这里是扔了一堆错误数据给 jiry_2BillXu2000

算法一

暴力枚举所有的置换,取等差子序列最少的就行啦!

如果用dfs的话时间复杂度是$O((n+1)!)$的。可以拿到$20$分哦!

算法二

我们先来打个表……诶好像长度为$\leq 10$的排列最优解没有长度$\geq 3$的等差子序列!

我们只要打个表,然后把所有数值相等的数放在一起就好啦!

时间复杂度是O(n)的。可以拿到另外的$20$分哦。

算法三

这题这么sxbk一定有结论!诶好像排列都没有长度$\geq 3$的等差子序列!

我来试着构造一下……你看只要分治就好啦!我们先将原序列排序,设$ans_{i}$为排序后答案第$i$位的数值。

对于一个区间$[l,r]$,我们先分治处理$[l,\lceil \frac{l+r}{2}\rceil ]$与$[\lceil \frac{l+r}{2}\rceil +1,r]$。

然后将左区间内的数$\times 2$,右区间内的数$\times 2-1$就可以啦。

为啥这样是对的呢?因为长度为三的等差数列的首项与末项必定同奇偶,然而在我们递归的过程中保证了不会出现这种情况!

时间复杂度是$O(nlogn)$的。又拿到$20$分啦!

算法四

我觉得吧……既然你会做算法三,推广一下就可以啦!

结论是不可能出现公差不为零的长度$\geq 3$的等差子序列。

对于一个区间$[l,r]$,我们只要把奇数全都丢到这个区间的左边,偶数全都丢到右边,所有数右移一位,递归处理就好啦!

时间复杂度是$O(nlogn)$的。AC啦!

吐槽

Q:这题时间复杂度是$O(nlogn)$的,为啥数据范围只有$500$?

因为出题人想了解一些其他靠谱算法哦!

(其实是误导你们

((真实情况是我们只会写$O(n^{2})$的spj

扩展问题:你们可以想一想算法三的spj怎么做到$O(nlogn)$。

万圣节的糖果

大家好这里是冒充 shanquan2BillXu2000

算法一

我们可以先无视集合的顺序进行计算,然后再$\times n!$。我们之后的算法都是基于这一点来做的。

然后回溯一下就好啦!

时间复杂度是$O((\frac{n}{2}!)^{2})$。应该能拿到$20$分吧……(拿不到别打我

算法二

我们令$f[i][j][k]$表示$1~i$这$i$个糖果分成了$j$个最后一个糖果奇偶性与$i$相同,$k$个最后一个糖果奇偶性与$i$不同的集合时的方案数。

那么$f[i][j][k]=f[i-1][k+1][j-1]\times (k+1)+f[i-1][k][j-1]$。

状态$O(n^{3})$,转移$O(1)$,所以时间复杂度为$O(n^{3})$,可以拿到$50$分哦!

算法三

我有一个绝妙的解法,但是这里空白太小了,写不下。

时间复杂度为$O(n^{2}logn)$,可以拿到$70$分哦!

算法四

我们来讲故事!

正当红包在计算方案数时,BillXu2000敲开了红包家的门,高呼着“泉岭精神不朽,汉中诸球永生”的口号冲进来传教。

红包告诉了BillXu2000他正在想的问题,但是BillXu2000过于泉岭精神,并不能算出方案数。

于是,BillXu2000开始鏼划另一种划分糖果的方案,他想的方案与红包的十分类似,但是唯一不同的是BillXu2000希望每个集合中的糖果奇偶性相同。

以下为BillXu2000的思路:

设$g[i][j]$为将i个不同的数划分成$j$个集合的方案数。

$$ g[i][j]=g[i-1][j-1]+g[i-1][j]\times j $$

设$dp[i][j][k]$为bx2k的划分的方案数,定义同$f$。

$$ dp[i][j][k]=g[\lceil \frac{i}{2}\rceil][j]\times g[\lfloor \frac{i}{2}\rfloor][k] $$

“我算出来啦,是#@%!”BillXu2000逗逼地说。

“为啥我也算出来#@%?”红包并不能理解。

BillXu2000发现他不小心把自己带来的一颗糖算进了答案。

经过他们俩一番思考,他们发现$f[i][j][k]=dp[i+1][k+1][j]$。

在窗外的你偷偷地把这个解法实现,交到了uoj上。

“这样的话只要$O(n^{2})$次计算就可以出结果呢……"你趁着夜色逃了回去。

证明

这题可以用归纳法证哦!

当$i=1$时,只有$j=1,k=0$时方案数为$1$,其余方案数均为$0$。

当$i>1$时,若对于任意$j,k$,满足$f[i-1][j][k]=dp[i][k+1][j]$,则

$$ f[i][j][k]=f[i-1][k+1][j-1]\times (k+1)+f[i-1][k][j-1]=dp[i][j][k+1]\times (k+1)+dp[i][j][k]=dp[i+1][k+1][j] $$

就证好啦!

这个思路是不是很自然呢?

证明二

不自然!

比赛结束以后已经有好多人这么抱怨啦..UOJ萌萌哒的题目也被点了很多差评..

这个时候数学迷英勇地站出来拯救世界啦!

(以下是JRY从评论区贴过来的原话

对于一个分拆我们把每个集合都从大到小排序,然后一个数$x$只要不是所在集合内的最大数,就会有一个前驱(就是所在集合内最小的比它大的数)。

然后对于一个红包分拆,我们添加一个单元集$\{i+1\}$, 然后对于一个数$x$, 如果它是所在集合内最大数,就不动它;如果不是,就令它的前驱为原来的前驱加一。(我们可以从大到小枚举每一个数,这样依次定下每个数后来的位置)就得到了一个BillXu2000分拆。

这样变化之后的拆分显然有$k+1$个最大数和$i+1$奇偶相同的集合(原来的$k$个再加上$i+1$本身)和$j$个最大数和$i+1$奇偶相异的集合(即原来的$j$个),然后逆变换也很显然。

这就证明了$f[i][j][k]=dp[i+1][k+1][j]$。

这样是不是就兹瓷了许多啊..

最后还是要感谢业界良心的数学迷提出了一个这么直观的解释owo

共 27 篇博客