感谢跟我一块任性的队友,没有他们我们就没有这次的成绩~~
这次比赛之后还是感觉很心塞:我们在比赛的临场发挥不够好,作为思考核心,我的思考速度奇慢,导致热身赛到最后才想出后面2道题的做法,正赛还被榜单牵着走结果在G题耗费了不少时间,且思考太慢导致队友AC了B和C后才想到G解法(后面也是一片决策错误,结果到14:00才A出G。以double为cost应该考虑到比较大小的精度问题,至于费用流的模板的时间复杂度不是我们该考虑的),若不是这样或许还能A出D题;这次的题目不像是程序创新竞赛,更像是数据结构模板+概率论竞赛,题目区分度太差,奖牌数过多导致我们没有拿牌的实感,感觉像是随便发挥就得到奖牌。
原因:平时没有真正把自己投入赛场,导致赛场上没有把控好节奏;没有让脑袋彻底活动开,使自身的思考速度跟不上
做法:在实训和以后5个多月的时间里,有时间就做5小时模拟赛以对自己的赛时心理状态有所了解并对题目难度及相应对策。
题解:A就是单纯的乘加问题
B魔方模拟问题,空间想象能力和对程序的组织能力要好
C概率+积分问题,正解是n==0?0:1+ln(n),场上现猜出来,后面才发现是要积分出来
D概率论问题,注意转变思路。画了一大堆的概率树,最后才发现不同的硬币计算概率方法是独立的。第i种硬币在第j次成为唯一存活的概率,就是其他种类硬币第j次被放弃*第i种硬币在第j次存活的概率,设第i种硬币单次存活率是p(i),第j次被放弃的概率是p(i)j-1*(1-p(i)),前j次被放弃的概率是1-p(i)j,前j次原本有k个硬币的种类存活概率是1-(1-p(i)j)k;那第i种硬币存活概率是(1-(1-p(i)j)k)*累乘(q=1-n且q!=i)(1-p(q)j)
E数论问题
设g(n,p)=f(n)%p,求g(g(g(...,p),p),p),g的递归次数为k
其实斐波那契模数有循环节,(f(n)%p)%p == f(n%G(p))%p
设G(puku)=
(若ku>1,则结果是puku-1*G(pu);
若ku==1且pu==5,结果是20;
若ku==1且pu==2,结果是3;
若ku==1且pu%5==2或3,结果是2*(pu+1),没错,不用因子,因为到109还是直接就是这个数
否则,结果是pu-1,不用因子,同理)
N=p1k1*p2k2*...*pnkn
循环节G(N)就是G(p1k1),G(p2k2),...,G(pnkn)的最小公倍数
随便算下,发现含大于5质数因子的模数最终会被处理成只有2,3,5这3种中任意几种因子组成的模数
大于5的质数p加1减1,都可以分解为2和更小的质数,然后不断变小;
2->3->2*2*2->3*2*2->2*2*2*3->3*2*2*2;
3->2*2*2->3*2*2->2*2*2*3->3*2*2*2;
5->5*2*2->2*2*3*5->2*2*2*3*5->2*2*2*3*5
最终会收敛到一个数,然后模数都一样了,倒过来递推
G失败率是p^n+.....,转换过来就是成功率(1-p)^n,指数,转换为对数,就是倍数,可以用费用流解决,注意double比较大小时的精度和卡常数问题
K求一个点到整个点集中最近的点,本质上是求这个~~然后根据价格排序,离线查询,哪个花费少哪个先选出来