2020-team2-029

从 Trac 迁移的文章

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

原文章内容如下:

[/wiki/2020-team2 返回]

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

[[Image(Submissions.png,600px)]]

= 概述 =

 solved: 7/12

 rank: 4

= 流水账 =

开场G题卡常,'''H1Y28''','''G4Y33''','''D1Y43''','''J1Y52'''。

cxt去做A,写完后提交WA,于是cxt让pb帮忙验一下做法,然后发现问题。这时yyc讲了几个题的题意,cxt发现B生成函数快速幂一下就行,'''B1Y98'''。pb修出了A,'''A2Y110'''。

yyc去推C的分类讨论,推完后给队友讲了一下又去想L,想出一个半平面交做法,于是开始写。写到一半cxt想起还有一个K题签到题(???),于是换cxt写K,中途发现没那么简单,于是两人轮流上机,'''K2Y233'''。

最后yyc也没调出L,获得了-7的好成绩。

= 总结 =

=== pb: ===
队友太猛了,狂拿一血,这场好像在划水,G虽然有卡常的原因但还有一发corner case导致的wa,感觉写这种题还是容易讨论错。

然后几个难一点的题最后自己也没开出来,也没怎么帮到队友,感觉还是得提升一下自己的水平。

=== Creatix: ===
一支队不止一个几何手也挺好的吧。
准备和队长一起好好练几何。

写B的时候从听题到给两个队友各讲一遍算法到ac共27min,挺顺利的。

写完A题,然后一wa马上跑路……还好pb哥哥带飞,发现我合并操作不够彻底(这就是ACM的快乐之处吧,呜呜呜队友别怪我甩锅)。

对不起队长,没有好好完成过C的任务。

因为我确实觉得K好写……而且我应该真的没写太久吧……实际机时应该1 hour?我觉得要不是我自己吓自己还会更快……wa的那一发确实也怪题意不清,真的不太算我的锅。

K过了真开心,这场抢了两个一血。

如果我们计算几何再强一点就好了呢……~~传统计算几何弱队~~……就有时间做C了。

其实如果可以的话,不如我写计算几何,队长去写C。

光从专业的角度来说,我写计算几何还有一点优势,毕竟我有工图

[[Image(欸嘿.png,400px)]]

upd1:试了一下补E题……4小时过去了……cxt阵亡。gtm LCT切来切去连来连去,gtm LCT维护所有虚儿子信息,gtm 6k的细节题……

[[Image(趴.jpg,200px)]]

upd2:终于过E了。gtmd,我忘了LCT上的splay自带一个rev的tag,然后访问的时候没有pushdown。好久没像这样调题目调这么久了。11:15->16:19。

upd3:学了好久计算几何后,挺轻松地把L过了(58行)。坐在家里我啃着鸡排边想边写大概花了1hour,不算快。分类讨论以及计算方法详见题解处。


=== yyc: ===

为什么要抄那个怪怪的板子...为什么要写半平面交(最开始以为会少很多特判,和后来发现由于线不包含端点于是该判的还是要判...辣鸡分类讨论

板子还是自己搞一个吧,会少很多今天这样怪怪的情况。
= 题解 =

 * A:显然,若两个数列都单调递减,我们只要按顺序归并就好了。同时,我们注意到,若ai中有两个相邻位置(x, y)满足ax < ay,他们应该一起被选,即他们可以被合并,然后成为他们的加权平均数。

 * B:考虑令[x^k^]G=a(n-k),再令F=(1 + x + x^2^ + ... + x^l-1^)^m^ * G,则ans[i]=[x^n-i^]F 

 * C:

 * D:

 * E:用LCT维护树的结构。不失一般性,我们假设某一次交换时a[i] < a[i + 1]。则我们分两步走:
   * 删除a[i]:显然a[i]没有右儿子,把a[i]的左儿子接在a[i]的父亲上,然后把a[i]从父亲那边切除。
   * lemma1:在笛卡尔树上,(a[i] ... a[i + 1])在树上所构成的一条链权值单调。proof:考虑笛卡尔树建树过程。我有很棒的证明但是懒得写。
   * 把a[i]插入(a[i + 1] ... a[i + 2])在树上所构成的一条链里。由lemma1,我们通过makeroot+access可以获得一个键值有序的splay,在上面二分即可。

  然后是一些小经验:如果你发现执行一些从道理上讲没有用的操作改变了答案,想一想是不是忘记pushdown了……

  以及,LCT如果要维护虚儿字信息只要在ACCESS和LINK和CUT的地方注意一下就好,挺简单的。
 * F:

 * G:考虑一个序列的GCD其实等价于最小的数,以及所有数减去最小的数的值这n个数的gcd。故先求出所有的差的gcd,再调整最小值使其最小且合法。'''要写快读!'''

 * H:签到。枚举每位放什么元素,后面能够调整的位数即为后面两串有多少位置不同。

 * I:

 * J:容易发现相邻位置之间的大小关系不会发生改变。把点分为三类:极小值点,极大值点,一般点。极小值点的减小不受任何点约束,于是先修改为0。
 极大值点不对其他点产生约束,所以最后修改。其余的一般点,则必然被一个极小值点和一个极大值点包夹,显然它的最终答案取决于它旁边的那个极小值点。

 * K:直接dp(x, i)表示第x天卖了coin,卖完后共卖了i次的最大收益。转移显然。
 用类似单调队列的东西(实际上是list)去优化,每个点保存dp值,时间,以及x到今天的最小c,注意合并c相同的点以确保复杂度,另外注意时刻维护单调队列符合要求。

 * L:首先注意到,一个位置能看到黑边等价于他能看到黑边的某一个端点(理由:若该位置能看到黑边的任意一部分则其一定能看到黑边端点,因为白边的遮挡段是连续的)
   * 点和线段有四种位置关系。1:点不在线段所表示的直线上。2:点在直线上,但不在闭线段上。3:点和线段端点重合。4:点在开线段上。
   * 那么开始分讨(以下分讨的顺序不可调换)
     * 若有一个黑端点为4类型:inf
     * 若有一个黑端点为3:另一个为 1:inf; 另一个为 2:0。
     * 若有一个黑端点为2:0
     * 那么两个黑端点都为 1。若两个点在黑边所在直线的两边:0。否则,对每个白边端点求出黑边与其夹角的较小值,则我们就知道了所求三角形的一边边长(即白边长度)和两个角,这之后再判断inf或算出面积就很容易了

[/wiki/2020-team2 返回]

概述

solved: 7/12

rank: 4

流水账

开场G题卡常,H1Y28,G4Y33,D1Y43,J1Y52

cxt去做A,写完后提交WA,于是cxt让pb帮忙验一下做法,然后发现问题。这时yyc讲了几个题的题意,cxt发现B生成函数快速幂一下就行,B1Y98。pb修出了A,A2Y110

yyc去推C的分类讨论,推完后给队友讲了一下又去想L,想出一个半平面交做法,于是开始写。写到一半cxt想起还有一个K题签到题(???),于是换cxt写K,中途发现没那么简单,于是两人轮流上机,K2Y233

最后yyc也没调出L,获得了-7的好成绩。

总结

pb:

队友太猛了,狂拿一血,这场好像在划水,G虽然有卡常的原因但还有一发corner case导致的wa,感觉写这种题还是容易讨论错。

然后几个难一点的题最后自己也没开出来,也没怎么帮到队友,感觉还是得提升一下自己的水平。

Creatix:

一支队不止一个几何手也挺好的吧。

准备和队长一起好好练几何。

写B的时候从听题到给两个队友各讲一遍算法到ac共27min,挺顺利的。

写完A题,然后一wa马上跑路……还好pb哥哥带飞,发现我合并操作不够彻底(这就是ACM的快乐之处吧,呜呜呜队友别怪我甩锅)。

对不起队长,没有好好完成过C的任务。

因为我确实觉得K好写……而且我应该真的没写太久吧……实际机时应该1 hour?我觉得要不是我自己吓自己还会更快……wa的那一发确实也怪题意不清,真的不太算我的锅。

K过了真开心,这场抢了两个一血。

如果我们计算几何再强一点就好了呢……传统计算几何弱队……就有时间做C了。

其实如果可以的话,不如我写计算几何,队长去写C。

光从专业的角度来说,我写计算几何还有一点优势,毕竟我有工图

upd1:试了一下补E题……4小时过去了……cxt阵亡。gtm LCT切来切去连来连去,gtm LCT维护所有虚儿子信息,gtm 6k的细节题……

upd2:终于过E了。gtmd,我忘了LCT上的splay自带一个rev的tag,然后访问的时候没有pushdown。好久没像这样调题目调这么久了。11:15->16:19。

upd3:学了好久计算几何后,挺轻松地把L过了(58行)。坐在家里我啃着鸡排边想边写大概花了1hour,不算快。分类讨论以及计算方法详见题解处。

yyc:

为什么要抄那个怪怪的板子...为什么要写半平面交(最开始以为会少很多特判,和后来发现由于线不包含端点于是该判的还是要判...辣鸡分类讨论

板子还是自己搞一个吧,会少很多今天这样怪怪的情况。

题解

  • A:显然,若两个数列都单调递减,我们只要按顺序归并就好了。同时,我们注意到,若ai中有两个相邻位置(x, y)满足ax < ay,他们应该一起被选,即他们可以被合并,然后成为他们的加权平均数。
  • B:考虑令[xk]G=a(n-k),再令F=(1 + x + x2 + ... + xl-1)m * G,则ans[i]=[xn-i]F
  • C:
  • D:
  • E:用LCT维护树的结构。不失一般性,我们假设某一次交换时a[i] < a[i + 1]。则我们分两步走:
    • 删除a[i]:显然a[i]没有右儿子,把a[i]的左儿子接在a[i]的父亲上,然后把a[i]从父亲那边切除。
    • lemma1:在笛卡尔树上,(a[i] ... a[i + 1])在树上所构成的一条链权值单调。proof:考虑笛卡尔树建树过程。我有很棒的证明但是懒得写。
    • 把a[i]插入(a[i + 1] ... a[i + 2])在树上所构成的一条链里。由lemma1,我们通过makeroot+access可以获得一个键值有序的splay,在上面二分即可。

然后是一些小经验:如果你发现执行一些从道理上讲没有用的操作改变了答案,想一想是不是忘记pushdown了……

以及,LCT如果要维护虚儿字信息只要在ACCESS和LINK和CUT的地方注意一下就好,挺简单的。

  • F:
  • G:考虑一个序列的GCD其实等价于最小的数,以及所有数减去最小的数的值这n个数的gcd。故先求出所有的差的gcd,再调整最小值使其最小且合法。要写快读!
  • H:签到。枚举每位放什么元素,后面能够调整的位数即为后面两串有多少位置不同。
  • I:
  • J:容易发现相邻位置之间的大小关系不会发生改变。把点分为三类:极小值点,极大值点,一般点。极小值点的减小不受任何点约束,于是先修改为0。

极大值点不对其他点产生约束,所以最后修改。其余的一般点,则必然被一个极小值点和一个极大值点包夹,显然它的最终答案取决于它旁边的那个极小值点。

  • K:直接dp(x, i)表示第x天卖了coin,卖完后共卖了i次的最大收益。转移显然。

用类似单调队列的东西(实际上是list)去优化,每个点保存dp值,时间,以及x到今天的最小c,注意合并c相同的点以确保复杂度,另外注意时刻维护单调队列符合要求。

  • L:首先注意到,一个位置能看到黑边等价于他能看到黑边的某一个端点(理由:若该位置能看到黑边的任意一部分则其一定能看到黑边端点,因为白边的遮挡段是连续的)
    • 点和线段有四种位置关系。1:点不在线段所表示的直线上。2:点在直线上,但不在闭线段上。3:点和线段端点重合。4:点在开线段上。
    • 那么开始分讨(以下分讨的顺序不可调换)
      • 若有一个黑端点为4类型:inf
      • 若有一个黑端点为3:另一个为 1:inf; 另一个为 2:0。
      • 若有一个黑端点为2:0
      • 那么两个黑端点都为 1。若两个点在黑边所在直线的两边:0。否则,对每个白边端点求出黑边与其夹角的较小值,则我们就知道了所求三角形的一边边长(即白边长度)和两个角,这之后再判断inf或算出面积就很容易了
附加文件