2019-Sp050-lyk

从 Trac 迁移的文章

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

原文章内容如下:

[[Image(1.png,700px)]]

[[Image(3.png,700px)]]

[[Image(2.png,700px)]]

[wiki:2019-team2 返回Runespoor]


[http://opentrains.snarknews.info/~ejudge/team.cgi?contest_id=001421 contest]

== 流水账 ==


== 总结 ==

'''zqq: ''' 今天我感觉状态很差。可能因为前天晚上和昨天的事情,现在还有一点虚弱,我会尽快调整好状态。

            今天A题可能想到的是另一个方向,比直接后缀自动机多了一点点转化,但是其实也挺好写的。但是我忘了并查集需要双向维护。

            G题本来是很简单的签到题,结果还想了挺久,还写了一个错误的算法。然后J题还迷迷糊糊的读错了

            E题我们都感觉都是exgcd解同余方程,但是连ax + by = c解出来以后怎么得到方案都没有想到。感觉我的锅真的很大,不知道在想什么

            最后时间不够去搞构造然后很快写完算是一个比较好的策略吧

            其实感觉D也是可以想到的,只是没有时间了。

'''lyk:''' 开局给A题想了个假的做法浪费半小时。有空学学后缀自动机。


=== 题解 ===

[wiki:2017-Sp267-team2 legilimens]

* A : 后缀自动机对每个右端点求最长的合法括号序列。或者找出每个合法的括号序列(只有O(n)个),递归的找,加入分隔符。然后重新定义字符,跑后缀数组求权值和 * 出现次数最大的子串。注意并查集如果要维护向两边走要双向写,或者直接维护联通的一块,在记录左右端点。

* C :一定是999910.......枚举组成10的数对,对剩下的数DP计算方案数。注意选相同的数要一起考虑贡献

* D :也一定是组成99999k...枚举k的大小,如果k >= 10则尽量把后面数填小。k <= 8则填大。可以贪心完在考虑进位,很好写。特判全为9

* E :设a < b , exgcd解方程( ax + by = c )后希望abs(x)尽量小。答案是 2 * (abs(x) + abs(y) - 1 + (x > 0 && a < c)) 减掉的部分是以为a瓶太小,装不下这么多水,需要转移到b瓶

* F : @Heltion

* G :一定选值域连续的一段。注意两边都不完整的情况

* I : 非常巧妙的想法。可以用归纳法证明一定走斜率小的更优。把行和列建成点 :(i,row[i]) , (j,col[j]) 分别求凸包,然后每次选斜率小的走(注意走到下一个点的意思是花费另一边的贡献)

=== 补题 ===

* A : zqq

* D :zqq

* E : zqq

* I : zqq
  

返回Runespoor

contest

流水账

总结

zqq: 今天我感觉状态很差。可能因为前天晚上和昨天的事情,现在还有一点虚弱,我会尽快调整好状态。

今天A题可能想到的是另一个方向,比直接后缀自动机多了一点点转化,但是其实也挺好写的。但是我忘了并查集需要双向维护。

G题本来是很简单的签到题,结果还想了挺久,还写了一个错误的算法。然后J题还迷迷糊糊的读错了

E题我们都感觉都是exgcd解同余方程,但是连ax + by = c解出来以后怎么得到方案都没有想到。感觉我的锅真的很大,不知道在想什么

最后时间不够去搞构造然后很快写完算是一个比较好的策略吧

其实感觉D也是可以想到的,只是没有时间了。

lyk: 开局给A题想了个假的做法浪费半小时。有空学学后缀自动机。

题解

legilimens

  • A : 后缀自动机对每个右端点求最长的合法括号序列。或者找出每个合法的括号序列(只有O(n)个),递归的找,加入分隔符。然后重新定义字符,跑后缀数组求权值和 * 出现次数最大的子串。注意并查集如果要维护向两边走要双向写,或者直接维护联通的一块,在记录左右端点。
  • C :一定是999910.......枚举组成10的数对,对剩下的数DP计算方案数。注意选相同的数要一起考虑贡献
  • D :也一定是组成99999k...枚举k的大小,如果k >= 10则尽量把后面数填小。k <= 8则填大。可以贪心完在考虑进位,很好写。特判全为9
  • E :设a < b , exgcd解方程( ax + by = c )后希望abs(x)尽量小。答案是 2 * (abs(x) + abs(y) - 1 + (x > 0 && a < c)) 减掉的部分是以为a瓶太小,装不下这么多水,需要转移到b瓶
  • F : @Heltion
  • G :一定选值域连续的一段。注意两边都不完整的情况
  • I : 非常巧妙的想法。可以用归纳法证明一定走斜率小的更优。把行和列建成点 :(i,row[i]) , (j,col[j]) 分别求凸包,然后每次选斜率小的走(注意走到下一个点的意思是花费另一边的贡献)

补题

  • A : zqq
  • D :zqq
  • E : zqq
  • I : zqq
附加文件