
caioj
qq_20340417
这个作者很懒,什么都没留下…
展开
-
走格子
题意(原题): 一排n个格子,每步可以走1-k个格子。求走到最后一个格子的方案数。 k<=10,n<=2^31-1 思路: 矩阵乘法。 比如,n=5,k=2的时候序列为[1 2 4 8 15]。 解式子: [?]x[1]=[2] [?]..[2]..[3] 大概就是这样。小数据不能体现出规律,自己试着解诸如k=3,k=4的时候就能发现第一个矩阵的规律。 将此矩阵^n后再乘以一个竖原创 2017-10-27 11:16:58 · 269 阅读 · 0 评论 -
抓老鼠
题意(原题):n只白老鼠,m只黑老鼠,公主与龙轮流抓老鼠,公主先手,龙抓完老鼠以后随机跑掉另一只老鼠。抓到白老鼠赢。到抓完为止都抓不到白老鼠则龙赢。求公主赢的概率。思路:设f[i][j]为剩i只白老鼠与j只黑老鼠时赢的概率。对于任意k,1<=k<=n时,有f[k][0]=1。每次抓老鼠的时候公主进入可能赢的状态有3种方法: 1.抓到白老鼠,f[i][j]+=i/(i+j) 2.抓到黑老原创 2017-11-02 21:33:44 · 326 阅读 · 0 评论 -
选数
题意(原题):给出一个n*n的矩阵,让你选一些数,使得和最大。如果选了一个数,那么这个数周围8个格子的数都不能选。n<=15。思路: 一道好的状态压缩题目。我们可以用一个数x表示第i行的一个状态。比如现在n=3,i=1,x=3,那么将x转为二 进制就是011,(为了方便计算,我们将它反过来成为110)。110就表示第1行我们选第1、2个数,第三个不选。那么我们如何判断原创 2017-10-30 15:07:49 · 283 阅读 · 0 评论 -
滑块
题意(原题): 给出起始与目标两个3*3的矩阵,矩阵内数由0-8组成且互不相同。每次操作可以将0上下左右的任意数与0交换。求到达目标矩阵的最小步数。 思路(请先预习康托展开): 把每个状态进行康托展开成为一个数,随即宽搜即可。 代码:#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>using names原创 2017-10-29 15:36:43 · 247 阅读 · 0 评论 -
康托展开
显然的,给出n个数,范围在1-n间,每个数各不相同,即为全排列问题,方案数为n!。那么现在给出一个n个数的全排列,求在n个数的全排列按字典序排序以后,给出的全排列排第几。例子:3个数的全排列,按字典序排序后为123132213231312321“213”是第3名。此时我们需要用到一个叫“康托展开”的东西。是这样计算的,一开始ans=1:设当前在计算第i个数,则x=比a[i]小原创 2017-10-28 11:14:42 · 206 阅读 · 0 评论 -
成群的细菌
题意(原题): n个数,m个操作,操作分6种,时间t。每刻进行一个操作,循环进行。 求最后每个数的值。 操作分别有清空、翻多倍、给另一个数加上某数的值、清空某数并给另一个数加上某数的值、第i个数的值变为第i+1个的值(n变为1的值)。思路: 类似点的变换但还需要用到矩阵快速幂。代码:#include<cstdio>#include<cstdlib>#include<cstring>原创 2017-10-27 14:51:24 · 262 阅读 · 0 评论 -
矩阵幂级数
题意(原题): 给出矩阵A,求A+A^2…A^k。思路: 手推一下,即可算出A+A^2…A^k = A+A^2…+A^k/2+A^k/2(A+A^2…+A^k/2)。 二分+矩阵快速幂即可。 注意奇数的时候多加一个A^k。代码:#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#define GETMOD原创 2017-10-27 14:41:47 · 2050 阅读 · 0 评论 -
矩阵无限方
题意: 给出一个矩阵A,求A^x。 思路: 把矩阵当作整数进行快速幂。 代码:#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#define GETMOD %1000000007#define LL long longusing namespace std;struct node{ in原创 2017-10-27 14:35:28 · 409 阅读 · 0 评论 -
点的变换
题意(原题): 给出n个点,m个操作。 对每个点都进行这m个操作。 操作有平移、翻转、放大、旋转。 n<=10000,m<=1000000 思路: 暴力肯定会超时。 把每个操作都当成一个矩阵,再把这些操作都乘起来,再分别乘以每个点即可。 手推容易算出。 代码:#include<cstdio>#include<cstdlib>#include<cstring>#include<原创 2017-10-27 14:32:03 · 228 阅读 · 0 评论 -
斐波那契数列
题意(原题): 求斐波那契数列第n项模10^9+7的值。n<=2^31-1 思路: 由于n很大,所以不能暴力。 考虑矩阵乘法。 [ 0 1 ] x [ 2 ] = [ 3 ] [ 1 1 ] …[ 3 ] … [ 5 ] 那么把求出第一个矩阵的n-1次方后乘以[ 0 ]即可得出结果。 …………………………………………………………[ 2 ] 矩阵乘法的时候别忘记了模。原创 2017-10-27 10:42:18 · 520 阅读 · 0 评论