码迷,mamicode.com
首页 > 其他好文 > 详细

第七届Code+编程大赛划水记

时间:2020-05-24 21:05:53      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:打表   lin   等于   二次   http   就是   图片   strong   操作   

作为鸽子,回到家已经不想开电脑了,于是当场外选手快乐口胡。

div2的AB就咕了吧。

以下全都是口胡!

Div1 A

T1就来构造题不太好吧/kk

考虑如何操作一个序列:显然应该每次找最靠前的\(a_i=i\)的位置,然后操作它。

考虑如何算出一个长度固定的序列能操作多少次(在合法的情况下):从后往前推,设后面一共操作了\(x\)次,那么加上这个位置之后就会操作\(x+\lceil x/i\rceil\)次。还有一个特例:如果\(i|x\),那么也可以操作\(x+x/i+1\)次。

注意到这个特例有点意思,所以可以发现长度固定的序列,后缀操作的次数是一个区间内的任意整数。

不妨大胆猜想长度\(n\)是可以二分的,那么二分\(n\)之后做一遍上面的倒推,即可求出\(n\)过大还是过小,或是构造出解。

经过打表可以发现\(n\)大概是\(2\times 10^6\)级别的。

这样直接做复杂度\(O(n\log n)\),被出题人卡掉了。

我的想法:打表,预处理几个\(n\)出来,然后就可以减小二分范围,或是干脆把\([1,10^{12}]\)都覆盖掉。

题解做法:打表,发现\(\frac{n^2}{n+k}\)会趋近一个叫\(\pi\)的神秘常数,那么可以缩小二分范围。

Div1 B

离线,把每个位置第一次出现的时间给处理出来。

由于每一种权值被触发的次数之和是\(O(n\ln n)\)的,所以考虑把每一个权值的答案都处理出来。

于是对于一个权值,我们可以求出它在什么时间之后才能跳\(i\)次。

然后就做完了???

也可以直接在线做,每次修改的时候把能往后跳的权值找出来暴力跳。

由于场上降智了并没有想到怎么把能往后跳的权值找出来

Div1 C

见到数论当场暴毙……

赛后想了一下有一些思路,不过还是只会\(p\)是质数的情况。设\(P=\prod p_i\),那么显然可以把每一个\(p\)的答案乘起来(用中国剩余定理证明),但是我只会算\(p_i\)的答案模\(p_i\)得到的值。

滚去看题解,然后……

技术图片

我太难了,而且现在我还是不会证/kk

丢个\(p\)是质数的做法就跑吧/kk

先把式子换成\(x+y\equiv a\pmod{p}\),然后对于每一组\((x,y)\),方案数是两者二次剩余的解的个数相乘。

然后把\(y\)换成\(a-x\)

由二次剩余的理论,\(\sqrt x\)的解的个数就是\(x^{(p-1)/2}+1\pmod p\),所以令\(m=(p-1)/2\),答案的式子可以写成

\[\sum_{i=0}^{p-1} (i^m+1)((a-i)^m+1) \]

由二次剩余(或其他)的理论,\(\sum\limits_{i=0}^{p-1} i^m=0\),所以式子其实就是

\[\sum_{i=0}^{p-1} i^m(a-i)^m \]

把后面那东西爆开来,得到

\[\sum_{k=0}^m a^{m-k}(-1)^k{m\choose k}\sum_{i=0}^{p-1} i^{m+k} \]

后面的东西是一个自然数幂和,可以证明它等于\(-[m+k=p-1]\),方法可以用斯特林数+卢卡斯定理,或是其他更好的做法。

所以最终答案就是\((-1)^{m+1}\)

我真的不会算不取模的值啊/kk

Div1 D

不会,咕了。

第七届Code+编程大赛划水记

标签:打表   lin   等于   二次   http   就是   图片   strong   操作   

原文地址:https://www.cnblogs.com/p-b-p-b/p/12952288.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!