【WC2019模拟2019.1.12】总结

本文探讨了竞赛编程中的策略与技巧,包括如何通过交互题、DP计数题和原题来解决问题。详细解析了一个升序数列的插入问题,一个字符串计数问题,以及一个涉及多项式计算的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

鉴于我比较菜,所以没有特别好的打题策略。
今天只打了3小时45分钟,所以时间短了。
T1
一个升序数列a,里面的数字互不相同。
要插入一个与数列的数中都不相同的数x,询问ai和x的大小关系,询问的代价为cost[i]。
通过一系列询问,你最终知道了x该插哪,总共花费了C的代价。
求C的最小值。
一眼看上去交互题,逃。
匆匆忙忙打了cost[i]全部等于1的,拿了10分。
不知道他们怎么拿20分的。。。
正解是一个DP。
T2
开场很多人就切了,听说是原题。
DP计数题。
求有多少个字符串,它长度为n,字符集大小为s,并且它不纯在长度>1的回文后缀。
显然设f[i]表示长度为i的回文串,并且它不纯在长度大于1且小于i的回文后缀。
O(n2)O(n^2)O(n2)转移。
lim=⌊i+12⌋lim=\lfloor\frac{i+1}{2}\rfloorlim=2i+1
f[i]=slim−∑j=2limslim−j∗f[j]f[i]=s^{lim}-\sum_{j=2}^{lim}s^{lim-j}*f[j]f[i]=slimj=2limslimjf[j]
显然,这个DP符合不重不漏。因为一种不合法字符串刚好被统计到一次。
最后答案为Ans=sn−∑j=2nf[j]∗sn−jAns=s^n-\sum_{j=2}^{n}f[j]*s^{n-j}Ans=snj=2nf[j]snj
100分?不会定性分析,只会找规律。
由于数感好,所以设g[i]=∑j=2limslim−j∗f[j]g[i]=\sum_{j=2}^{lim}s^{lim-j}*f[j]g[i]=j=2limslimjf[j]
g[i]g[i]g[i]竟然有规律?!一开始g[i]的规律有点恶心不想写,所以直接DP,但后面的数都是有规律的。
g[i]=g[i−1]∗s+f[lim],i为奇数g[i]=g[i-1]*s+f[lim],i为奇数g[i]=g[i1]s+f[lim],i
g[i]=g[i−1],i为偶数g[i]=g[i-1],i为偶数g[i]=g[i1],i
交上去就AC了。
T3
某题原题,但是已经离上次AC过了很久了,忘了。
由于第二题花的时间较多,所以第三题没什么时间写50分,前两个数据点写挂了。
k=0,k=1,k=2很容易计算或找规律。
至于前两个数据点,考虑每个点对答案的贡献,也很容易求出。
Ans=n∗∑i=0n−1ikC(n−1,i)∗2C(n−1,2)Ans=n*\sum_{i=0}^{n-1}i^kC(n-1,i)*2^{C(n-1,2)}Ans=ni=0n1ikC(n1,i)2C(n1,2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值