斐波纳契数列(Fibonacci Sequence)

斐波纳契数列(Fibonacci Sequence)  0.前言 很久以前就想写一些竞赛学习的总结,但是由于之前事情比较多,导致计划不断的减缓。现在,大学教学任务的考试已经全部结束了,而比赛也告一段落,所以有时间来整理一下之前学过的东西。不久前,在做比赛的时候遇到了这样一个问题:求出第N个斐波...

2012-11-25 14:21:15

阅读数:2278

评论数:0

UVa 11347 - Multifactorials

题目:求一个数字n多阶乘的因子的个数。 分析:组合数学、数论。求出所有的素数因子的个数,然后利用组合数公式求解即可。结果为π(pi+1),其中pi为第i个素数因子的个数。 注意:数据过大会超出整形,但是利用double即可。 #include #include #include ...

2012-11-29 20:11:45

阅读数:1530

评论数:0

UVa 10334 - Ray Through Glasses

题目:求在3快玻璃间反射k次的光线条数。 分析:找规律,fib。可以找到规律,f(k) = f(k-1)+f(k-2)。光线分为两种:距离外阶有1层玻璃和距离外界有2层玻璃。距离外界有2层玻璃的光线是上次反射出去的光线,距离外界有1层玻璃的光线是上上次反射出去的光线,所以满足fib数列。 注意...

2012-11-29 19:57:04

阅读数:1239

评论数:3

UVa 763 - Fibinary Numbers

题目:斐波那契进制加法。 分析:模拟、大整数。先将两数装换成10进制加和,再转化回Fib进制数即可。 注意:fib(100)超过long long类型。 #include #include #include char a[105]; char b[105]; int F[105]...

2012-11-29 19:18:23

阅读数:1054

评论数:0

UVa 481 - What Goes Up

题目:最大上升子序列。 分析:dp、lis、二分、单调队列。LIS的O(nlogn)算法。此算法,利用单调队列+二分优化。单调队列里的元素Q[i]为,到目前为止、长度为i的LIS中最小的结束元素。运行过程中,如果当前元素小于队尾元素,则可以和前面的构成LIS,直接加入队尾,否则替换之前的长度相同...

2012-11-27 14:45:27

阅读数:1647

评论数:0

UVa 10340 - All in All

题目:判断a串是不是b串的子串。 分析:暴力。直接利用一根指针跟踪a串即可。时间复杂度T = O(min(len_a,len_b))。 注意:要利用cin,用scanf会TLE。 #include #include #include using namespace std; cha...

2012-11-26 14:13:37

阅读数:2792

评论数:3

UVa 10305 - Ordering Tasks

题目:求出满足对应顺序的序列。 分析:图论、拓扑排序。知道起点用dfs效果更好,不知道可以暴力。 #include #include #include int edge[105][105]; int list[105]; int used[105]; int main() { in...

2012-11-26 13:00:41

阅读数:942

评论数:0

UVa 10192 - Vacation

题目:最大公共子序列或最大上升子序列。 分析:dp、LIS或LCS。LIS和LCS之间课转换,按串1的顺序求串2的LIS即可。 #include #include #include char str[ 128 ]; char val[ 128 ]; int f[ 128 ][ 128...

2012-11-26 11:27:45

阅读数:675

评论数:0

UVa 11151 - Longest Palindrome

题目:求最常回文子串。 分析:dp、LCS,求一个串的最常回文子串就是本串与翻转串之间的最大公共子序列。 注意:数据中有空串。 #include #include #include char string[ 1005 ]; char revstr[ 1005 ]; int f[ 1...

2012-11-26 03:41:27

阅读数:1361

评论数:0

UVa 443 - Humble Numbers

题目:求由{2,3,5,7}组成那的数字集合的第n个数字。 分析:利用4根指针,对应每个数字当前对应的因子,每次取最小的数值,指针后移。注意相等的情况。 注意:输出的计数法。 #include #include #include int d[ 5850 ]; int v[4] =...

2012-11-26 00:55:27

阅读数:1465

评论数:0

UVa 350 - Pseudo-Random Numbers

题目:随机数产生器 L = (L*Z+I)%M。 分析:简单题、模拟。很多计算机上的随机数就是利用循环节等于M的四元组构造出来了,而L通常取当前时间。 注意:初始的L不一定是循环节中的元素。 #include #include #include int used[ 10001 ]; in...

2012-11-25 13:49:20

阅读数:2301

评论数:4

UVa 324 - Factorial Frequencies

题目:计算n!每位上的数字出现的次数。 分析:简单题、模拟。大数计算,先计算大数阶乘,然后统计即可。 注意:366!有760位左右,注意数组大小。 #include #include #include int ans[ 201 ]; int bit[ 10 ]; void coun...

2012-11-25 13:13:54

阅读数:1186

评论数:0

UVa 623 - 500!

题目:大整数阶乘计算。 分析:简单题、模拟。大数计算,可以采用位数压缩,节约时间空间。把k位存入一位,每次10^k进位即可,利用%0kd输出很方便。 注意:500!有2632位,位数开少会WA。 #include #include #include int ans[ 451 ];...

2012-11-25 12:56:22

阅读数:739

评论数:0

UVa 10591 - Happy Number

题目:求一个数每个数位上数字的平方和,为最后是否能转换化1。 分析:简单题、数论。求循环节。因为9^9*9 #include #include #include int used[ 1000 ]; int bitsv( int v ) { int sum = 0; while ( ...

2012-11-25 12:25:45

阅读数:649

评论数:0

UVa 543 - Goldbach's Conjecture

题目:歌德巴赫猜想,给出一个数字给出两个奇素数使得和为这个数字。 分析:简单题、数论。首先打表求出1000000以内的素数,然后枚举即可。 #include #include #include int used[ 1000005 ]; int prim[ 1000005 ]; int m...

2012-11-25 12:07:09

阅读数:790

评论数:0

UVa 374 - Big Mod

题目:求 (B^P)mod M。 分析:简单题、分治。快速模幂算法。 注意:P可以为0,要特判,否则会RE。 #include #include int spow( int b, int p, int m ) { if ( p == 0 ) return 1; if ( p == ...

2012-11-25 11:44:13

阅读数:1115

评论数:0

UVa 10346 - Peter's Smokes

题目:有n根雪茄,每次抽完会剩下一部分,剩下部分的k根还可以组成一根,问一共可以出现多少根雪茄。 分析:简单题。利用一个变量last储存当前剩下部分的数量,则可以组成新的雪茄数量就是last/k,新的剩下的部分是last/k + last%k(新组成的剩下的部分+上次没有组成新的雪茄的剩下的部分...

2012-11-25 11:08:37

阅读数:810

评论数:0

UVa 11495 - Bubbles and Buckets

题目:求给定序列的逆序数。 分析:分治、逆序数、归并排序。利用mergesort求逆序数,时间复杂度O(nlogn)。一个序列的逆序数 = 左半序列的逆序数+右半序列的逆序数+两半之间的逆序数。因为每半序列是排好序的,所以逆序数为合并时每次选择右半段序列的元素时,左序列还留有的元素个数。 #inc...

2012-11-23 17:57:23

阅读数:1080

评论数:0

UVa 116 - Unidirectional TSP

题目:求从左到右的一条路径上的加和最小。每次可以采取本行、上行和下行的走法。 分析:dp。数塔变形,由于要求最小序列,所以采取从右向左dp、可以保证右边的都是最小序列,每次记录后继节点,输出即可。 注意:在最上和最下两行有可能行的编号编程最大和最小的。 #include #includ...

2012-11-22 15:18:48

阅读数:606

评论数:0

UVa 10928 - My Dear Neighbours

题目:求一个有向图中出度最少的节点。 分析:简单题、图论。统计每个节点度数,比较大小输出。 注意:有向图。 #include #include #include int edge[ 1005 ]; int main() { int T,P,M; while ( scan...

2012-11-22 10:38:33

阅读数:831

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭