The Preliminary Contest for ICPC Asia Xuzhou 2019

本文详细解析了多项编程竞赛题目,涵盖了斐波那契博弈、中国剩余定理、树的深度优先搜索、区间和维护、函数性质分析等高级算法与数据结构应用。作者分享了解题思路,提供了解决方案,并讨论了常见错误与优化技巧。
RankSolvedABCDEFGHIJkLM
258/19459/13ØOOOOØOØOOO.O

O: 当场通过

Ø: 赛后通过

.: 尚未通过

A Who is better?

upsolved by Feynman1999


Feynman1999’s solution
斐波那契博弈结论题 + 中国剩余定理(模数不互质)板子

B so easy

solved by viscaria


viscaria’s solution

C Buy Watermelon

solved by viscaria


viscaria’s solution

D Carneginon

solved by viscaria


viscaria’s solution

E XKC’s basketball team

solved by viscaria


viscaria’s solution

F Little M’s attack plan

upsolved by chelly


chelly’s solution

先考虑能否解决“以点u为根的子树中,深度差<=k的所有点的权值和”。这个可以在对树dfs的过程中,用BIT维护一个权值数组,那么对于一个询问的答案就是开始遍历u前的区间和与遍历完u后的区间和的差。时间复杂度O(nlogn)O(nlogn)O(nlogn)

但是原问题不止考虑子树。注意到qqqkkk都很小,所以对于一个询问(v,k)(v,k)(v,k)可以拆成O(k)O(k)O(k)个询问子树的问题。于是就解决了。

G Colorful String

solved by chelly


chelly’s solution

H function

upsolved by Feynman1999


Feynman1999’s solution
注意函数f(x)f(x)f(x)虽然不满足积性,但是也有很好的性质。即f(xy)=f(x)+f(y)f(xy) = f(x)+f(y)f(xy)=f(x)+f(y),这样所求式子可以化简为∑i=1ng(i)\sum_{i=1}^{n}g(i)i=1ng(i), 其中g(i)=(n−i+1)∗f(i)g(i) = (n-i+1)*f(i)g(i)=(ni+1)f(i)
nnn是1e10又不是积性函数,考虑如何EES:
dfs参数要有f(当前数k的f(k)值),k(当前数)

  • 对于最大质因子指数为1的贡献:∑p[n−kpi+1][f(k)+f(p)]=[f(k)+1]∗[∑(n+1)∗1−k∗∑(pi)]\sum_{p}[n-kp_i+1][f(k)+f(p)]=[f(k)+1]*[\sum(n+1)*1-k*\sum(p_i)]p[nkpi+1][f(k)+f(p)]=[f(k)+1][(n+1)1k(pi)],
  • 对于最大质因子指数>1的数(e.g. i)的贡献:直接就是g(i) = f(i)*(n-i+1)。其中iiif(i)f(i)f(i)边乘边维护即可(*p和+1)

I query

solved by Feynman1999


Feynman1999’s solution
考虑1~n中所有pair是陪数关系的是nlogn级别的,预处理出来,问题变为二维数点问题,树状数组搞一下(求右下角的点,按x重大到小,y从小到大排序)询问1-y 权值树状数组

J Random Access Iterator

solved by chelly


chelly’s solution

K Center

solved by viscaria


viscaria’s solution

L Dice

unsolved


M Longest subsequence

solved by chelly


chelly’s solution

Dirty Replay

  • C题:
  • B题:被卡常了,TLE了一发
  • I题:
  • K题:
  • A题:
  • M题:nx[i][j]应该表示s[i..n]s[i..n]s[i..n]中第一个字符jjj的出现位置(不包括i),第一发写成了包括i的,WA了一发。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值