GDOI2020总结

GDOI2020总结

  • ~~GDOI2020总结~~大型翻车事故分析
    • Feelings
    • Earlier period
    • Basic facts
    • Analysis on each problem
      • Day1
        • T1---icefire
        • T2---problem
        • T3---shop
      • Day2
        • T1---transfer
        • T2---tree
        • T3---count
    • Postscript

GDOI2020总结大型翻车事故分析

Feelings

今年是2020年!今年是2020年!今年是2020年!2020果然不简单——

  1. 本蒟蒻即将迎来中考,就要成为高中生了!
  2. 本蒟蒻终于有机会参加所谓省选大考!
  3. 初三一年成长飞快,从普及一等都没拿到,到加入了冲刺省选的大队伍!
  4. 同级巨佬YYT果然挤进A队了吗!我也要时刻追赶啊!

Earlier period

疫情在家,线上文化课当然要好好搞,当然要好好管理时间了:

  1. “什么?上课了?”——打开钉钉,最小化页面
  2. 早上这么好的时间,当然是用来码题的啦!
  3. 下午这么好的时间,当然是用来码题的啦!
  4. 晚上这么好的时间,当然是用来码题的啦!
  5. 钉钉钉,“什么?作业未交提醒……这年头还有人做没用的作业吗?
  6. 刷题、写总结、学算法、搜文献……

Basic facts

  1. 在我们大纪中举办,真不错!
  2. 拿到了超过预期(赛前)的分数,然而并没有发挥好,还能更高分的。
  3. DAY2比DAY1还水。。。

Analysis on each problem

觉得难度还算低?

Day1

有点紧张,扫完三题题意,
先定性:T1—阅读理解题;T2—公式推导题;T3—以线性基为基础的神仙题?
感觉T2比较和谐,,,先推推T2……无果。
再康康T1,要卡常?码着先—调试许久。
赶紧把后两题暴力打了—T3暴力花了不少时间。
然后就放弃了后两题,优化T1。。。
结果:T1没检查做法,求最大时间时出现大BUG,杂度巨大。。人人切的T2我,,害。T3花那么多时间水到10分还不如刚前两题。

T1—icefire

~~水题。~~打倒多人的烦题。
几个要注意的地方:

  1. 繁琐的题面需要你仔细阅读,准确简化问题
  2. 保证消耗总能量最高的情况下要求温度的最高值—多打个二分会方便又好打。
  3. 输入量大—快读
  4. 时间紧—常数优化
  5. x,y很大—离散化
    没切很可惜。

T2—problem

要求这个式子:
( ∑ k = 0 n f ( k ) × x k × ( n k ) )   m o d   p \Large (\sum_{k=0}^nf(k)\times x^k\times \dbinom{n}{k} )\bmod p (k=0nf(k)×xk×(kn))modp
其中:
f ( x ) = ∑ i = 0 m a i × x i \large f(x)=\sum_{i=0}^{m}a_i\times x^i f(x)=i=0mai×xi
显然要把这个m次多项式的各项贡献分别算,考虑计算:
A i = ( ∑ k = 0 n k i × x k × ( n k ) )   m o d   p \Large A_i=(\sum_{k=0}^nk^i\times x^k\times \dbinom{n}{k} )\bmod p Ai=(k=0nki×xk×(kn))modp
暴力。

部分分m=0—根据组合意义简化:
A n s ≡ a 0 × ( ∑ k = 0 n x k × ( n k ) ) ≡ a 0 × ( x + 1 ) n \large Ans\equiv a_0\times (\sum_{k=0}^nx^k\times \dbinom{n}{k} )\\ \large \equiv a_0\times (x+1)^{n} Ansa0×(k=0nxk×(kn))a0×(x+1)n
A_i的简化似乎比较麻烦,某位大佬指点,可以尝试把普通多项式 f 变为 下降幂多项式 g:
g ( x ) = ∑ i = 0 m b i × x i ‾ \large g(x)=\sum_{i=0}^{m}b_i\times x^{\underline{i}} g(x)=i=0mbi×xi
改写A:
B i ≡ ∑ k = 0 n k i ‾ × x k × ( n k ) ≡ ∑ k = 0 n k ! ( k − i ) ! × x k × n ! k ! × ( n − k ) ! ≡ n i ‾ ∑ k = 0 n x k × ( n − i n − k ) ≡ n i ‾ ∑ j = 0 n − i x j + i × ( n − i j ) ≡ n i ‾ x i ∑ j = 0 n − i x j × ( n − i j ) ≡ n i ‾ x i ( x + 1 ) n − i \Large B_i\equiv \sum_{k=0}^n k^{\underline{i}} \times x^k \times \dbinom{n}{k}\\ \Large \equiv \sum_{k=0}^{n} \frac{k!}{(k-i)!} \times x^k \times \frac{n!}{k!\times (n-k)!}\\ \Large \equiv n^{\underline{i}} \sum_{k=0}^{n} x^k\times \dbinom{n-i}{n-k}\\ \Large \equiv n^{\underline{i}} \sum_{j=0}^{n-i} x^{j+i}\times \dbinom{n-i}{j}\\ \Large \equiv n^{\underline{i}} x^i \sum_{j=0}^{n-i} x^j\times \dbinom{n-i}{j}\\ \Large \equiv n^{\underline{i}} x^i(x+1)^{n-i} Bik=0nki×xk×(kn)k=0n(ki)!k!×xk×k!×(nk)!n!nik=0nxk×(nkni)nij=0nixj+i×(jni)nixij=0nixj×(jni)nixi(x+1)ni
这里复杂度O(1)!!!接下来只要求出m+1个b就行了。

x的n次下降幂显然为一个n次多项式。

因此有:
b m = a m \Large b_m=a_m\\ bm=am
设:
F m = f F i − 1 = F i − b i × x i ‾    , i = 1 , 2 , . . . , m \Large F_m=f \\ \Large F_{i-1}=F_i-b_i \times x^{\underline{i}}~~,i=1,2,...,m Fm=fFi1=Fibi×xi  ,i=1,2,...,m
则:
b i = F i [ x i ] \Large b_i=F_i[x^{i}]\\ bi=Fi[xi]
这里复杂度O(m^2)

T3—shop

利用线性基转化为保序回归问题。

还不会。。

Day2

听到大佬们疯狂嘲讽Day1,鼓起多拿些分的勇气。

虽然又炸分了,但仍比Day1高分。

T1没怎么想—十分可惜,T2秒切(调得久),T3 50部分分显然。

主要问题:时间控制不当,代码实现能力有待提高。

T1—transfer

显然状压。大概是因为想复杂了,竟然没想到。。

T2—tree

对树上每个节点的val求和:
v a l ( x ) = ⨁ y 在 x 的 子 树 中 ( d i s x , y + v y ) \Large val(x)=\bigoplus_{y在x的子树中}(dis_{x,y}+v_y) val(x)=yx(disx,y+vy)
显然要把每个二进制位的贡献分开算—把位运算变为四则运算:
A n s i = ∑ x v a l i ( x )   m o d   2 \Large Ans_i=\sum_{x}val_i(x) \bmod 2 Ansi=xvali(x)mod2
发现每个点对 其到根的链上的点 的贡献是周期性的0/1变化,容易想到用差分解决。

T3—count

套路+套路。

求:
A n s = ∑ T v a l ( T ) = ∑ T ( ∑ i = 1 n − 1 w e i ) × ( w e 1 , w e 2 , . . . , w e n − 1 ) \Large Ans=\sum_{T}val(T)=\sum_{T} (\sum_{i=1}^{n-1} w_{e_{i}})\times(w_{e_1},w_{e_2},...,w_{e_{n-1}}) Ans=Tval(T)=T(i=1n1wei)×(we1,we2,...,wen1)
gcd部分的拆解套路:
I ∗ ϕ = i d ( a 1 , a 2 , . . . , a n ) = ∑ ∀ a i , d ∣ a i ϕ ( d ) \Large I*\phi=id \\ \Large (a_1,a_2,...,a_{n})=\sum_{\forall a_i,d|a_i}\phi(d) Iϕ=id(a1,a2,...,an)=ai,daiϕ(d)
接下来就变成:
A n s = ∑ d = 1 w m a x ϕ ( d ) ∑ T , 其 中 d ∣ w e i ∑ i = 1 n − 1 w e i \Large Ans=\sum_{d=1}^{w_{max}} \phi(d)\sum_{T,其中d|w_{e_{i}}}\sum_{i=1}^{n-1} w_{e_{i}} Ans=d=1wmaxϕ(d)T,dweii=1n1wei
接下来要解决的是快速计算生成树边权和。

容易想到,我们的Matrix-tree Theorem,它能解决的是生成树边权积。拿到50部分分——

然而考场只检查了矩阵树部分,没检查暴力部分,只拿了25分。。

根据巨佬们指点,我们可以把边权定为(wx+1)再做矩阵树,得到的多项式的一次项即为边权和——“妙啊!!!”

Postscript

是金子总会发光的!
定 奋力向前奔跑,不负大好青春!

你可能感兴趣的:(比赛总结)