posted @ 2014-03-10 21:32 闪之剑圣 阅读(154) 评论(0) 推荐(0) 编辑
摘要:
题目给你了一个很大的n,然后让你去计算它的质因数。对N进行开方得到的是一个大约在32000左右的数,我们可以用埃氏筛法进行素数打表。对所有prime[i]<=sqrt(n),分别看prime[i]能否整除n,若能整除就用n/=prime[i]然后继续寻找即可。值得注意的是,当我们搜寻完素数表中的所有 阅读全文
摘要:
这道题又一次更新了我的世界观与人生观Orz……最开始我是设计了一个O(n)的递推算法,本以为可以轻松AC没想到居然TLE了……然后搜了一下题解,才发现这道题要用矩阵的思想去做。 通过对题目的分析,我们可以得到矩阵递推公式如下: 将公式右边推至a1,a0即可得: 然后这个题的关键就转化成了求[p q; 阅读全文
posted @ 2014-03-08 17:41 闪之剑圣 阅读(228) 评论(0) 推荐(0) 编辑
摘要:
说起这个题呢,就不得不提一种快速求解幂的算法——反复平方法,可以在O(logn)的复杂度完成求幂运算。具体思路我不说,巫泽俊大神翻译的《挑战程序设计竞赛》P123对此有详细描述。 但仅知道这个算法并不表示就能算出这道题,还需要一定的数学推理过程: N=a0+a1*k+a2*k^2+……an*k^n 阅读全文
posted @ 2014-03-04 22:54 闪之剑圣 阅读(212) 评论(0) 推荐(0) 编辑
摘要:
这道题一旦想开,其实思想十分简单的。 首先考虑n为奇数的情况,不难知f(n)=f(n-1)。(只需要把n的所有拆分式-1即可……) 然后考虑n为偶数的情况,将拆分式划分为两种情况:一种是式子中带1的,把1从式子中去掉就可以得到f(n-1);一种是式子中不带1的,那么就把式子中的全部项除以2得到f(n 阅读全文
posted @ 2014-03-04 22:44 闪之剑圣 阅读(214) 评论(0) 推荐(0) 编辑
摘要:
一道赫夫曼树的经典题目,一直以为这题的代码会很复杂,没想到书中竟描述地如此简单 #include <stdio.h> int n; long long p[20010]; //一道经典的赫夫曼编码题 void swap(int &min1,int& min2) { int d; d=min1; mi 阅读全文
posted @ 2013-11-11 09:59 闪之剑圣 阅读(243) 评论(0) 推荐(0) 编辑
摘要:
此题的意思比较好理解,给定一堆数,他们有着特定的值,从中选出总数量最大的一堆数,使得两两之间对应值的差小于等于m。 由于此题的数量级比较大,达到十万级,因此不能利用简单的二层循环来实现。而应当首先对数据按照特定值进行排序,然后i从1到n进行遍历,i<=j,若j-i<=m,则继续,直到得到j-i>m为 阅读全文
posted @ 2013-05-15 22:11 闪之剑圣 阅读(201) 评论(0) 推荐(0) 编辑
摘要:
这道题运用了多重背包的思想,所以这里重点讲一下多重背包的做法: 0-1背包只要认真看过《算法竞赛入门经典》的应该已经掌握了。其实首先,我们可以将多重背包问题,转化为0-1背包问题,只要将数量为v的每一种物品“展开”看做v个价值相同的物品,然后用0-1背包的方法去求即可。但是这样肯定会TLE的。运用状 阅读全文
posted @ 2013-04-27 00:36 闪之剑圣 阅读(249) 评论(0) 推荐(0) 编辑