2011年3月30日

一个数的因子有几个

摘要: hdoj 1299 Diophantus of Alexandria再次感叹自己的数学很悲剧。。。。转载地址http://hi.baidu.com/fbyz/blog/item/c8e23e889a4bce91a5c27245.htmlx 、y、n都是正整数,并且 显然,x >= n , y >= n ,现在假设 y = n +k (k为正整数) ,那么带入公式,可以得出 x = (n*(n+k))/k = n*n/k + n; 由于x 是正整数,现在的关键问题就是要求出 n*n/ k 有多少组正整数的可能,显然,所要求的就是 n*n 因子的个数// 问题已经非常接近答案了,但是最 阅读全文
posted @ 2011-03-30 14:28 CrazyAC 阅读(7159) 评论(0) 推荐(0) 编辑
2011年3月28日

去掉数字里面一位数的问题

摘要: hdoj 1271 整数对看了别人的解题报告,再次对自己数学能力表示悲哀~~~~~~对于这种问题,我们通常可以把这个数表示成这样:A = a*10^(k+1) + b*10^k + c ,b表示去掉的那一位。所以去掉后的数就变成了, B = a*10^(k+1) + c。A + B =( a * 11 + b ) * 10^k + 2 * c; 单个c比10^k次方小,但是2*k可能比10^k次方大,所以2*c = n%10^k 或者2*c = n%10^k+10^k; a, b, c的关系就弄清楚后,我们就可以进行枚举。枚举的顺序是先对k枚举,然后对c的两种情况枚举,其次枚举b。#inclu 阅读全文
posted @ 2011-03-28 20:16 CrazyAC 阅读(326) 评论(0) 推荐(0) 编辑
2011年3月26日

枚举子结构得到最优解的动态规划问题

摘要: 当子问题的数量不多时,通常我们能够比较清晰地求出最优解的结构,然后理清各种状态之间转移的过程。但是,如果一个动态规划拥有多个子结构时,我们往往会觉得无从下手,面对这种情况,我们可以考虑下枚举子结构,然后得到动态规划的最优解。而且,有时候我们在枚举子结构时,还要运用另外一些最优结构。我们看看下面几个例子。1.hdoj 1584 蜘蛛牌我们定义dp[i][j]表示从牌的大小为i到牌的大小为j这一串牌,通过移动得到满足条件的一堆牌的最小步数。对于牌1来说,他必须移到到2的上面,但是我们不知道,当他移到2位置上时2到底在哪,所以我们可以枚举2的位置。这样我们就得到了状态转移方程:dp[1][10] = 阅读全文
posted @ 2011-03-26 19:45 CrazyAC 阅读(769) 评论(0) 推荐(0) 编辑

搜索一个是n倍数的大数,bfs

摘要: hdoj 1226 超级密码求一个大数,满足是n的倍数,但是长度不超过500位。一开始以为搜索的状态有m^500,觉得无从下手。其实我们可以运用同模定理,所以状态最多是n,从0到n-1。还有这里要保存路径,所以用数组来模拟队列,每个节点记录他父亲节点在数组队列中的下标值。总结:1.大数问题,特别是涉及到倍数方面的,考虑下取模运算。 2.bfs搜索求路径时,用数组模拟队列取代queue。#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using na 阅读全文
posted @ 2011-03-26 14:13 CrazyAC 阅读(276) 评论(0) 推荐(0) 编辑
2011年3月25日

最短路总结

摘要: 朴素最短路。hdoj 2544 最短路 告诉你图的点,和拥有的边,求两点最短路。我们只要把图存到邻接表或者邻接矩阵中,然后用dijkstra或者spfa来操作这个矩阵就可以得到起点到终点的最短路了。spfa:#include <iostream>#include <cstdio>#include <cstring>#include <queue>#define inf 100000000using namespace std;int len[102], mp[102][102];int adjmp[102][102];int n, m;void 阅读全文
posted @ 2011-03-25 18:00 CrazyAC 阅读(498) 评论(0) 推荐(0) 编辑
2011年3月22日

空间向量夹角

摘要: 空间夹角公式见下图:代码:#include <iostream>#include <cmath>using namespace std;const double eps = 1e-11;struct Node { double x, y, z; Node() { x = y = z = 0; } Node(double a, double b, double c) { x = a; y = b; z = c; } Node operator- ( Node nd ) { return Node(x-nd.x, y-nd.y, z-nd.z); }};Node goodE 阅读全文
posted @ 2011-03-22 23:00 CrazyAC 阅读(10643) 评论(0) 推荐(0) 编辑
2011年3月21日

模拟,区间覆盖,区间合并

摘要: hdoj 1199 Color the Ball题目的思路就是用黑的段去更新白的段,然后合并白的段。更新时,如果全被黑的覆盖了,则令白段的左位置为0。#include <iostream>#include <cstdio>#include <algorithm>using namespace std;struct Node { int l, r;}ns[40005];int len, n;bool cmp( Node nd1, Node nd2 ) { return nd1.l < nd2.l;}void black( int a, int b ) { 阅读全文
posted @ 2011-03-21 21:34 CrazyAC 阅读(297) 评论(0) 推荐(0) 编辑

hdoj 1180 BFS,优先队列

摘要: hdoj 1180 诡异的楼梯规范的BFS写法,可以很有效地避免一些状态判重和状态转移上的细节错误,以下总结了三点。//hdoj 1180#include <iostream>#include <cstdio>#include <queue>using namespace std;struct Node { int x, y, step;};bool operator< ( Node n1, Node n2 ) { return n1.step > n2.step;}int n, m;int dir[4][2] = { 0, 1, 1, 0, 0 阅读全文
posted @ 2011-03-21 13:22 CrazyAC 阅读(505) 评论(1) 推荐(0) 编辑
2011年3月20日

为依消得人憔悴。。。

摘要: 前天晚上熬夜做codeforce,昨晚又熬夜TC。国外那些比赛完全在整中国的程序员,都放在凌晨。偶寝室十一点后又断网,不得已只能在实验室通宵,实在消得人憔悴。。。。而且偶还被分到一个几乎全是鬼子的房间,⊙﹏⊙b汗。。。还好比赛比较给力,最后room第一名,干了鬼子一场,之前排我前面那两哥们都没通过系统测试,哈哈,无尽兴奋。。。今晚SRM500是有5000刀奖金的,平均分给每个房间。可惜比赛前,偶以为自己一定拿不到的,注册时果断同意把奖金捐出去,点了YES,尽显中国ACMer的大方,而且偶还在暗笑,悲剧。现在想来十分后悔,毕竟这是偶TC的第一次奖金,意义重大。。。。。。 阅读全文
posted @ 2011-03-20 21:12 CrazyAC 阅读(198) 评论(0) 推荐(0) 编辑
2011年3月19日

Codeforces Beta Round #62

摘要: 昨晚做了下比赛就早早地睡了,早上爬起来一看,才蛋疼地发现第二题忘记考虑除0的情况,加了一两行代码,一交就AC了,杯具~~~~~~sum - ave*n = ( a[n] - ave)* k% + (a[n-1]-ave)*k% + (a[n-2]-ave)*k% + ... + (a[i]-ave)*k%#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>#include <vector>#include <iterator># 阅读全文
posted @ 2011-03-19 07:28 CrazyAC 阅读(410) 评论(2) 推荐(0) 编辑