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

SDOI Day1

时间:2015-04-20 20:47:21      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:

好了做了SDOI day1的3道题,来讲下做法及感想吧

T1:排序(暴力,搜索)

题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3990

我们可以很轻易的发现,对于一个操作方案,交换两个操作顺序不会影响答案,因此我们可以从小到大枚举答案,可以发现,对于第i种操作过后,每个2^i的块必须是连续的

那么在第i种操作之前,最多只能有2个块不连续,那么如果没有块不连续,不用执行该种操作;只有一个块不连续,交换这个块的两小块;两个块分4种情况讨论,用dfs暴力搜索即可

时间复杂度看上去是O(4^N),但好像可以证出复杂度其实是O(2^NlogN)N=20都能跑过

CODE:

T2:寻宝游戏(平衡树,dfn序)

题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3991

这道题真的想不出来啊= =

贴下同学的题解吧= =

 

技术分享大概就是这样子的,看上去还是非常的形象的,但我根本没想到啊QAQ

T3:序列统计(FFT)

题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3992

这道题分明就是原题好不好= =

首先我们可以很容易的写出状态转移f[i][[j*a[k]]+=f[i-1][j];

30%的分数可用矩阵乘法优化

我们取下离散对数(就是mod m意义下的),然后这个方程就变成了f[i][ind[j]+ind[a[k]]]+=sigma(f[i-1][ind[j]*cnt[inda[k]])

可以发现变成了卷积形式了,好像可以用fft优化了

但发现n很大

借鉴一下矩阵乘法的优化,可以发现多项式乘法满足结合律,那么我们可以愉快的学习快速幂的形式,变成f0*cnt^n次方了

时间复杂度是 mlogm logn完美解决本题

还有一件事,求离散对数可以不用大步小步法,因为p很小,可以直接p^2求出来

顺便提下原题是lydcjj(greenclouds)的kpmcup#1中的T1(ORZ),除了取离散对数其他都一模一样的

要不是做了MX的组合数和看过云神的题,还真不一定做得出来

总结一下:

作为省选题,还是很不错的

思考复杂度都不低(虽然有人说3道都是原题QAQ,自己还是太弱)但是编程复杂度并不高,前两道都能秒,第3道套个fft模板也能秒

还是这种考思维的比较好玩,像陈老师这种业界毒瘤的数据结构题真是丧心病狂(づ ̄ 3 ̄)づ

 

SDOI Day1

标签:

原文地址:http://www.cnblogs.com/New-Godess/p/4442054.html

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