其它
Little_Flower_0
一只小花
展开
-
Codevs3332 数列
题目大意:a[1]=a[2]=a[3]=1,且a[x]=a[x-3]+a[x-1] (x>3),求a数列的第n项对1000000007(10^9+7)取余的值。思路:显然,直接乘与开数组是无法通过该题的。于是,我们想到了矩阵乘法与快速幂。开一个数组a[4]={0,1,1,1},转移矩阵为{{0,0,1},{1,0,0},{0,1,1}},经过n-3次幂后再与a相乘,这样a[3]就是所求的答案。在原创 2015-08-22 14:48:13 · 1081 阅读 · 0 评论 -
Vijos1008 篝火晚会
题目大意:给定初始序列和构建目标序列的条件,问最少需要多少步所谓的“变换”能达成该序列。对题目的理解:如果按照原文所说,“变换”的定义是“这个命令的作用是移动编号是b1,b2,…… bm–1,bm的这m个同学的位置。要求b1换到b2的位置上,b2换到b3的位置上,……,要求bm换到b1的位置上”,但这条命令究竟是什么意思呢?我相信不少人的理解是将a1至am这些数字循环移动一位(实际上我刚开始也是这原创 2015-08-12 10:17:36 · 787 阅读 · 0 评论 -
POJ2823 Sliding Window
题目大意:给定n个数,有一个长度为k的窗口从左滑至右,依次输出窗口内的最大值与最小值。思路:显然,这是单调队列的模板题。这里说一下单调队列:这是一种具有单调性的队列,以求最大值为例,将出现的数据按时间(即从左向右)放入队列中。当一个元素被从尾部放入队列中时,考察已在队列中的末尾元素,如果比要插入的元素值小,则一直删至一个比它大的元素值或队列为空为止。这样队列内部就是单调递减的。这样做的合理性在于,原创 2015-09-12 15:03:51 · 460 阅读 · 0 评论 -
Vijos1845 花匠
题目大意:给定一列整数,求满足题中所给的条件的最长子序列的长度。思路:列举上几个i的值就可以发现,实际上题目要我们求一个最长摆动数列,并且数列中的每个数要么比它的左右两个数都小,要么就都大。这样我们只需遍历一遍数列求出波峰与波谷的个数最后加上两端的就行了。代码如下:#include<iostream>#include<cstdio>#include<cstring>#include<cm原创 2015-10-21 08:06:42 · 594 阅读 · 0 评论 -
Vijos1096 联合权值
前言:第一次参加NOIP时遇到的题。当时傻傻地用Floyd跑结果TLE,幸亏矩阵还没开爆。回想起来也是相当惊心动魄的……思路:如果要一个个的找儿子再找孙子(因为这是一棵树,所以是可行的),O(n2)O(n^2),TLE。所以可以换一种思路,可以枚举中间点,这样也能得到同样的效果。但是单纯的枚举一个点后再找所有儿子,仍然是O(n2)O(n^2),仍TLE。其实仔细观察就可以发现,记sum[i]代表点原创 2015-10-31 08:14:59 · 651 阅读 · 0 评论