初中OJ2105【NOIP2016普及组复赛】魔法阵
来源:互联网 发布:男科网络咨询说话技巧 编辑:程序博客网 时间:2024/04/20 23:53
这是这次NOIP比赛中的第四题,感觉有些难度。
题目大意:
有四个数A、B、C、D,满足以下条件:
①A<B<C<D
②(B-A)=2(D-C)
③3(B-A)<(C-B)
先说说80分的方法。
设CD之间的距离为i,则AB为2i,BC为6i+k (k>0)
所以,我们可以先把同一数值的数用一个数组存个数,然后枚举i、A和C。
重点是如何统计方案数。
设Wi表示数值为i的数出现次数。
则根据排列组合可以得知,A的次数就是Wb*Wc*Wd。
B就是Wa*Wc*Wd。
以此类推。
最后把每个数所对应的数组输出,就可以拿到80分。
(看懂了80分再看100分)
100分:
尝试把三重降到两重。
根据上面可以得知,我们其实只要枚举一个A和i,接下来把所有符合条件的CD求出计算。
可以用后缀和来实现这一想法。
设SUM[i]表示从i~n-i之间所有的CD对的乘积。
因为A和B是已知的,而CD却是不定的,所以先用后缀和求出A和B的方案数。
为了求出最多的方案数,假设k=1。
因为AB为2i,BC至少为6i+1,所以C至少为A+8i+1。
接下来再把之前的公式合并一下,就变成了这样:
方案数A=Wb*Sum[A+i*8+1](所有的Wc*所有的Wd)
同理,方案数B和方案A近似,只不过Wb要变成Wa。
接下来求CD的方案。
把刚才的方法改一下,用前缀和计算出所有的AB对的乘积,再枚举C的位置(D的话改一下也可以)
只不过A和B的距离为2i,所以计算前缀和时要这样算:
Sum[j]=Sum[j-1]+W[j]*W[j-2*I]
BC间隔至少为6i+1,所以B最大为C-6i-1。
所以C的方案数就是Wd*Sum[C-6*i-1](所有的Wa*所有的Wb)
D就不用讲了吧。
最后把每个A[i]对应的次数输出就行了。
- 初中OJ2105【NOIP2016普及组复赛】魔法阵
- 【NOIP2016普及组复赛】魔法阵
- 【NOIP2016普及组复赛】魔法阵
- 2105. 【NOIP2016普及组复赛】魔法阵
- noip2016普及组复赛第四题 T4魔法阵
- 【NOIP2016普及组】复赛——魔法阵
- 【NOIP2016】普及组魔法阵
- noip2016普及组复赛
- [NOIP2016普及] 魔法阵
- 【noip2016普及】魔法阵
- 【原创】【NOIP2016普及组】魔法阵
- NOIP2016普及组[魔法阵]题解
- noip2016普及组复赛总结
- noip2016普及组复赛题解
- 【复习】冲击NOIP2016普及组复赛
- NOIP2016普及组11.19复赛总结
- 【NOIP2016】普及组复赛赛后总结
- NOIP2016普及组复赛解题报告
- c::单链表的实现(值得一看)
- POJ 1761 Integer Intervals(差分约束系统+BellmanFord)
- spring-test单元测试(四)-后记
- 使PC端网页宽度自适应手机屏幕大小
- DS和[address]
- 初中OJ2105【NOIP2016普及组复赛】魔法阵
- 推荐系统必读的10篇精选技术文章
- 推荐系统中常用算法 以及优点缺点对比
- Initializing Spring root WebApplicationContext log4j:WARN No appenders couould be found for logger (
- mysql索引与范式
- 数据结构之双向链表(C语言实现)
- NULL¬ NULL
- android 网络请求获得返回数据(1)
- spring boot 整合 spring security 之使用数据库验证