摘要: 一个需要进行转化的题目。x = (n*(n+k))/k = n*n/k + n,最后求小于等于N且是N^2的因子的数的个数。代码如下:#include <cstdlib>#include <cstdio>#include <cstring>#include <cmath>#include <map>using namespace std;int N;map<int,int>mp;map<int,int>::iterator it;int fun(){ int ret = 1; for (it = mp.begi 阅读全文
posted @ 2012-07-25 12:01 沐阳 阅读(257) 评论(0) 推荐(0) 编辑
摘要: 简单的快速矩阵幂:Fn 1 1 Fn-1 = * Fn-1 1 0 Fn-2把前面的矩阵作快速幂就可以了。代码如下:#include <cstdlib>#include <cstdio>#include <cstring>#include <algorithm>#define MOD 10000using namespace std;struct Matrix // ['meitriks]{ int a[2][2]; void New (int x, int y, int z, int w) { a[0][0] ... 阅读全文
posted @ 2012-07-25 10:05 沐阳 阅读(242) 评论(0) 推荐(0) 编辑
摘要: 该题与上题相比增加了多种分法,而不只是四条边,问题是最多能够分成多少条边。上题代码其实错了(已改),但是也过了,这题改的还纠结。代码如下:#include <cstdlib>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int N, seq[100], mode, use[100], flag;void dfs(int cap, int last, int num){ if (num == N) { flag = 1; return; } if 阅读全文
posted @ 2012-07-25 02:47 沐阳 阅读(321) 评论(0) 推荐(0) 编辑
摘要: 该题问给定的棍子能否组成一个正方形。首先我们要判定是否总长度是4的倍数,然后再决定是否存在某条边大于组合边长。搜索的过程中也是可以进行剪枝了。首先将边排序,我们可以假定所有的组合边由大小递减的边组成,那么我们在搜索的时候就不用再往前找边了。其次我们可以确定任何一条边都一定在一条组合边中,那么当我们以任意一条边开搜的情况下无解的话,那么我们就可以直接返回no了。最后在搜索某条边无解的情况下,我们可以把相同大小的边略过,因为前面相同长度的边都无法安排出一种方案,在少一条相同边情况下肯定也就无法给出安排了。代码如下:#include <cstdlib>#include <cstdi 阅读全文
posted @ 2012-07-25 01:02 沐阳 阅读(310) 评论(0) 推荐(0) 编辑