sdut
johsnows
正在静下心来学算法的acmer
展开
-
第八届山东省赛 C sdut 3895 fireworks(组合数+逆元)
题意:一个烟花(位置为x)每秒爆炸并往两边(x-1,x+1)分裂成两部分,不断循环。给你n个位置,每个位置上有c个烟花,问t秒后,w位置上有多少个烟花。解题思路:容易推出对于一个烟花来说,t秒后周围的烟花数量分部就是杨辉三角的t+1行,不过每两个数之间要多一个0.n的上限1e5,不能打出杨辉三角需要o(n^2)的时间显然是不行的。所以我们只能直接求组合数,求的时候除法取原创 2017-05-10 12:37:27 · 430 阅读 · 0 评论 -
山东省第八届省赛 sdut 3896(找规律+组合数取模)
题意:如图让你求从(1,1)到(A,B)有多少种方案。解题思路:设向左走l步,向下走r步,向下走c步,我们枚举c,当c确定的时候,l和r也同时确定了,然后求一下l,r,c的排列数(l+r+c)!/(l!*r!*c!)就好了。需要预处理阶乘的逆元。具体见代码:#include #define LL long long using n原创 2017-05-10 16:53:48 · 598 阅读 · 0 评论 -
第七届山东省赛 Feed the monkey(dp)
题意:给出a,b,c三种物品,每种物品有A,B,C件,将所有的物品排成一列,每种物品不能连续出现aa,bb,cc次,问有多少种排列方式。解题思路:很明显的dp,但是转移不好想。首先我们需要思维i,j,k,l分别表示当前用了i件a,j件b,k件c,序列末尾是第l种物品,dp[i][j][k][l]就表示这个状态有多少种排列方式。l是不可少的,只用三维的话怎么也做不对。原创 2017-06-03 19:28:01 · 371 阅读 · 0 评论