【2017国庆雅礼集训】长沙雅礼划水记

Day 1

一题给出数轴上 n 个坐标xi有权值 wi ,求由 |xixj|wi+wj 连边构成的最大团。
这个式子长得太像两圆相离或外切的表示了(连数轴都告诉你了呀),于是瞬间变成取最多不重区间的水题。。。
然而我居然忘了还有右端点排序后 O(n) 的简单贪心,写了个 O(n2) 的dp加二分优化【我太咸啦】。好在总复杂度还是 O(nlogn) 不会炸(O_O)
于是20分钟拍完

当我看到二题的时候,心中突然掠过一丝欣喜——暑假讲过的原题啊(笑
但毕竟是线段树,码量略大,于是先读第三题,然后整个人都愉快了起来。(一天两道原题是要闹哪样啊?)(不过也就只有第一天2道,第二天1道是原题。而孔爷告诉我他平均一天一道原题。。。%%%ky

三题关键在推出二分性(当时上课的时候,这个二分性还是我志己推出来的呢),二分+数位dp, O(nlognlogn) ,也可以逐位贪心 O(nlogn) 。其实逐位贪心反而更好写,只要对从高到低依次计算“如果这一位是1,会产生多少贡献”,贪心决策取不取这一位。

然后回去写第二题。支持取膜、单点修改和求和的线段树,暴力修改,max剪枝,不打tag, O(nlognlogn) 。因为不打tag,比普通区间线段树还好写。

写完后离考试结束还有2个小时,就把二题三题都对拍了。一题暴力比正解还难写(最大团?)于是就没拍,反正这么水的线段覆盖也不会出什么锅,手了几个极端数据就过了。
这时还剩1个小时,于是就开始自以为是,觉得今天稳了。。。

然而也并没有很稳,不过270分对我这个菜鸡选手来说已经算是心满意足了。
原来是第三题少了个特判。其实题面中有关于某特殊情况的处理,然而被我忽视了。。。若能引起注意,我一定会想想为什么会出现这种特殊情况。。。认真读题!认真读题!认真读题!


下午fateice神犇来讲dp,晚上雅礼dy0607讲了几道AGC,算是杂题选讲吧。。还是挺有意思的,学了点套路。


Day 2

这曾是我离AK最近的一天

一题带权并查集秒了。考完后听他们每个人的做法真是千奇百怪,有写dp的,还有类似人脑做法的。题解竟然是dp?可是并查集多么好写好调啊。dp状态的定义需要些技巧,否则会变得超级码农。

二题思路来的也比较快。只要把spfa或dijkstra中的松弛操作变一下即可。

然后到三题就卡住了。上了个厕所回来决定打限制 xi100 的30分暴力。
但其实我的暴力思路是错的。我以为限制100是因为100里有25个质数,可以状压记录每个质数的倍数或公倍数有多少个,然后变成一个高维前缀和或容斥解决。
写了写发现这样连暴力也做不了,于是考虑优化。我发现较大的质数是互斥的,并不会有他们的公倍数出现,这样就造成了储存与处理的巨大浪费,于是考虑用更高效的压缩方式优化。
再一想,最高效地记录一个数包含哪些质数的方式不就是它本身吗?而题目值域为500000,那不就完全可以存下了。用容斥做,每次修改和查询都是 O(x) 的,总复杂度 O(mx) ,应该是正解。【这种暴力没打出来结果想到了正解的剧情也太狗血了吧】

于是今天250。三题T了。。。WTF??? T_T

下午讲题时ysy抽我来讲50分做法,于是我愉快的讲了容斥做法。——“这是正解啊。那你怎么50分?”——我TM也想问啊!

回宾馆调了一晚上,发现本机跑果然也T了。可是我的复杂度绝对没有写伪。
一怒之下直接注释掉所有处理算法来运行。震惊:printf200000个lld用了3秒钟!!!那我又有什么办法呢?
直接把原代码交到洛谷(团队题)去测。AC…
为什么只有这道题输出会出锅啊?printf也会挂这么厉害啊?为什么明明是正解代码,测评姬和本鸡双双TLE啊?你给我个解释啊。。。


下午ysy讲数论。

  • Miller-Rabin素数检验与Pollard-rho合数分解(然而很少用)
  • 中国剩余定理
  • 阶:使得 ax1(modp) 的最小正整数 x 称为a p 的阶,记为ordpa。即 a 的幂在模p意义下的不同取值个数。
  • 原根: ordpa=φ(p) 时,称 a p的原根。即 a 0(φ(p)1)次幂恰好不重不漏地占满小于 p 且与p互质的所有 φ(p) 个数。
    有原根的数只有形如 1,2,4,pk,2pk ,其中 p 为奇素数,kN+
    原根个数为 φ(φ(p))
  • 如果 x2a(modp) 有解,称 a 为模p的二次剩余,否则称 a 为模p的二次非剩余。
    质数 p 的二次剩余与二次非剩余个数相同。
    如何快速判断a是否是 p 的二次剩余?判断ap121
  • 拉格朗日定理:若 p 为质数,f(x)为模 p 意义下的n(n>0)次多项式,那么 f(x) 至多有 n 个模p不同余的根。
    证明用数学归纳法:若 f(x) 有一个根 x0 ,则可分解 f(x)f(x0)=(xx0)g(x) ,其中 g(x) n1 次多项式。
  • 莫比乌斯反演(不想抄了)

晚上讲的题还挺有意思的(好难啊)。get了一个线段树技巧:

  1. 对于不太兹辞pushup的线段树(比如维护区间凸包),要支持在线插入末尾和区间查询:自下而上地建树,当这一段填满后才暴力( O(n) )建出这一段。即左右儿子都有了而父亲还不存在时就把父亲建出来
  2. 如果还要支持删除末尾,就不能删除时暴力拆解,添加时暴力构建,这样如果在一个点反复横跳的话就会T。做法是填满一个块后不立即构建当前块,而是找当前层的前面一块,如果前一块没有构建,就构建前面的块,否则就什么都不干。这样查询时仍然会查到 O(logn) 个区间,并且如果要构建第 i 层的长度为2i的区间,至少要进行 O(2i) 次操作。
  3. 适用范围:
    • 区间信息无法 O(logn),O(1) 快速合并, 只能做到 O(n),O(nlogn)
      其实也就是不支持快速合并, 但是支持快速插入, 能不能快速删除无所谓。
    • 如果维护好了区间, 查询可以快速得出 ( O(logn) )
    • 区间之间互相无影响且查询信息可以快速合并 ( O(1),O(logn) )
    • 对于这样的问题, 我们可以得到一个序列上支持插入删除的在线做法。

Day 3 - 8

留坑待填

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值