上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 17 下一页

2012年7月3日

HDOJ 2032 递推求组合数

摘要: 杭电100题,牛们请略过。# include <stdio.h>int cnk[31][31];void prepare(void){ int i, j; for (i = 1; i < 31; ++i) cnk[i][0] = cnk[i][i] = 1; for (i = 2; i < 31; ++i) for (j = 1; j < i; ++j) cnk[i][j] = cnk[i-1][j-1] + cnk[i-1][j];}int main(){ int n, i, j; prepare(); whil... 阅读全文

posted @ 2012-07-03 08:18 getgoing 阅读(322) 评论(0) 推荐(0) 编辑

2012年6月14日

[HDOJ] goagain的超级数列

摘要: 题目链接:http://acm.hdu.edu.cn/diy/contest_showproblem.php?cid=15840&pid=1002这道题乍看是递推,实际上 n 就超过 int 型了,递推必定超时;在 POJ 上的斐波那契一道题用的是矩阵的方法+二分,这道题也一样,不过矩阵可以构造成三阶的;今天用 GNU C 挂了两题,%lld 不支持???最后都是用 VC 过的;矩阵相乘的重复了,不敢用二维数组作形参,以前遇到这个问题卡得要死……麻烦就麻烦点吧。# include <stdio.h># include <string.h>typedef long 阅读全文

posted @ 2012-06-14 22:08 getgoing 阅读(255) 评论(0) 推荐(0) 编辑

[HDOJ] 小兔的棋盘

摘要: 链接:http://acm.hdu.edu.cn/diy/contest_showproblem.php?cid=13094&pid=1003记忆化搜索,不要要清空 f[][],这道题打表其实更快,因为打表会发现有陷阱;陷阱:n=35 时会达到10^19,当然,用 int 能通过样例;n = 0,输出为 1 ;使用%llu,没有通过(GNU C),不知道什么原因;# include <stdio.h>long long int f[40][40];long long int dp(int i, int j){ if (f[i][j]) return f[i][j]; if 阅读全文

posted @ 2012-06-14 10:43 getgoing 阅读(302) 评论(0) 推荐(0) 编辑

2012年6月6日

POJ 2251 Dungeon Master

摘要: 习惯用双广了,这次WA了好几次,标记起和终止始节点时发现了错误,后来没改彻底,具体见注释行。双广速度快,空间小,结构也相对 bfs 简单;# include <stdio.h># include <string.h>typedef struct {char l, r, c;}Pos; /* char 足够了,比较时没出错 */const int dir[][3] = {{0,0,1}, {0,0,-1}, {0,1,0}, {0,-1,0}, {1,0,0}, {-1,0,0}};Pos start, goal;char L, R, C;char dun[35][35] 阅读全文

posted @ 2012-06-06 23:53 getgoing 阅读(186) 评论(0) 推荐(0) 编辑

2012年6月5日

给出到不共线三点的距离,求这个点的坐标、随机生成浮点数

摘要: 给出到不共线三点的距离,求这个点的坐标(公式是用 maple 求的):# include <stdio.h># include <string.h># include <math.h># define TRUE 1# define FALSE 0const double ERR = 0.05;typedef char BOOL;typedef struct { double x; double y;}Point;Point s1, s2, s3; /* station */double d1, d2, d3; /* dista... 阅读全文

posted @ 2012-06-05 17:53 getgoing 阅读(588) 评论(0) 推荐(0) 编辑

COJ 1216 异或最大值

摘要: 这道题也是搁了很久了,这次百度之星初赛中有道题感觉很相似,还是不会……,中午看status时,看到有个牛过了这道题,于是搜了搜,发现都是说用01二叉树来解决的,我没细看他们的方法,自己研究了一下,最后AC了,因为将一个 char 当成 8 位来用,所以空间是很小的; 我的思路可能不太一样,还有些暴力的痕迹,不过因为使用了位运算,加速比较明显:二叉树用数组来做,输入一个数时,顺带将这个数在二叉树中所经历路径用 1 来标记,然后遍历这些数一遍,对每个数,找出二叉树中已经标记的与这个数距离最远的叶结点,相当于对每个数在其他数中找到和它异或最大的那个,然后把这个异或的结果来更新 ans ,就可以找.. 阅读全文

posted @ 2012-06-05 17:45 getgoing 阅读(3572) 评论(3) 推荐(0) 编辑

2012年6月4日

POJ 1562 Oil Deposits

摘要: 简单DFS,搜索八个方向。# include <stdio.h>const int dir[][2] = {{-1,0}, {0,-1}, {0,1}, {1,0}, {1,1}, {1,-1}, {-1,1}, {-1,-1}};int n, m;char f[105][105];char read_data(void){ int i, j; scanf("%d", &m); scanf("%d", &n); if (m == 0) return 0; for (i = 1; i <= m; ++i) { scanf( 阅读全文

posted @ 2012-06-04 12:06 getgoing 阅读(200) 评论(0) 推荐(0) 编辑

ZOJ 2110 Tempter of the Bone

摘要: 很早就看到这道题了,当时不太会DFS,搜索只会用BFS;早上看了看书,才发觉DFS是用来解决这种问题的,就把这道题做了,1A;其中涉及两个剪枝:一个是奇偶性,另一个是可以走的方块的数量要不少于要求的步数。# include <stdio.h># include <math.h>char maze[10][10], escape;int n, m, T, sx, sy, dx, dy;const int dir[][2] = {{-1,0}, {0,-1}, {0,1}, {1,0}};char read_data(void){ int i; scanf("%d 阅读全文

posted @ 2012-06-04 10:54 getgoing 阅读(186) 评论(0) 推荐(0) 编辑

2012年5月27日

UVa 10181 - 15-Puzzle Problem

摘要: 题目链接不好找:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1122用的 IDA*,跑了6.536s,时限是45s(刚看了627个人通过,我是第515名……,排行榜比较恐怖啊,见下图)这道题的逆序剪枝和八数码不同,具体参考这篇文章:http://mathworld.wolfram.com/15Puzzle.html1A! 1 # include <stdio.h> 2 # include <math.h> 阅读全文

posted @ 2012-05-27 13:09 getgoing 阅读(1754) 评论(0) 推荐(0) 编辑

ZOJ 1217 eight

摘要: 八数码,双广、A*都超时了(可能是写得不好),IDA*通过了;在POJ上是16MS(和双广一样,A* 60MS左右),HDOJ上是800MS左右(双广是500MS),ZOJ上只有IDA*没超时(2480MS)。 1 # include <stdio.h> 2 # include <math.h> 3 # include <string.h> 4 5 # define MIN(x, y) ((x)<(y) ? (x):(y)) 6 7 # define N 9 8 # define DIR_N 4 9 # define INF 0x7fffffff 10 阅读全文

posted @ 2012-05-27 01:07 getgoing 阅读(1216) 评论(0) 推荐(0) 编辑

八数码(IDA*)

摘要: IDA*+曼哈顿 相当快! 通过五组数据总计用时 0.015000 s.把宏定义中的N和SIZE改一下,就可以处理十五数码问题了,终于修炼到第八层了;刚开始还是使用结构体定义了状态,写得相当麻烦,后来发现IDA*中不像BFS和A*,只需要考虑一条路,,参考了lym(http://www.cnblogs.com/liyongmou/archive/2010/07/19/1780861.html)的(后面调试的受不了了,对照着此大牛的代码一点点改,最后发现是更新状态时,npos写成了pos……)# include <stdio.h># include <math.h># i 阅读全文

posted @ 2012-05-27 00:51 getgoing 阅读(2009) 评论(0) 推荐(0) 编辑

2012年5月24日

八数码(A*)

摘要: 第一道A*,照着A*的框架写的,不是很理解A*,写的也很长,中间有些标记的不太理解,去掉标记在POJ提交通过了,还是没理解A*的思想;犯了个低级错误:在判断新状态 0 的位置(nx, ny)是否越界时,应该是0 =< nx < 3,结果写成了0<= nx <=3,还叫LJ大牛一块查,最后终于给发现了;在写 A* 之前以为 A* 会省不少空间(扩展的节点相比 BFS 少很多),实际上却开了两个大数组: f[] 和 g[],一下子感觉也挺浪费的,时间上感觉快了很多,我测试的几组都是0MS,在POJ上提交是64MS;两周以前就决心花几天时间搞八数码和十五数码(主要是想学学A* 阅读全文

posted @ 2012-05-24 23:49 getgoing 阅读(1294) 评论(0) 推荐(0) 编辑

2012年5月23日

COJ 1080 A simple maze

摘要: 地图很小,50×50,所以普通的BFS就行了;1WA:地图用%s读取时,读入的是字符0,在判断是否有路径时和数值0比较。 1 # include <stdio.h> 2 # include <string.h> 3 4 typedef struct {short x, y;}queue; 5 6 const short dir[4][2] = {{-1,0}, {1,0}, {0,-1}, {0,1}}; 7 8 int r, c, sr, sc, er, ec; 9 char m[55][55], v[55][55], d[55][55];10 queue 阅读全文

posted @ 2012-05-23 17:17 getgoing 阅读(400) 评论(0) 推荐(0) 编辑

2012年5月21日

HDOJ 1043 eight

摘要: 实际上和POJ 1077一样,但是这里有多组输入,并且有一组输入为12345678x(也就是不需要移动就达到了目标状态),这时还要输出一个空行。 1 # include <stdio.h> 2 # include <string.h> 3 4 # define N 9 5 # define MAXN (362880 + 10) 6 7 typedef struct{ int k; char d; } foot; 8 typedef struct{ char a[N]; } state; 9 10 const char md[4] = {'u', ' 阅读全文

posted @ 2012-05-21 13:50 getgoing 阅读(547) 评论(0) 推荐(0) 编辑

2012年5月20日

POJ 1077 eight

摘要: 双广,16MS,相当快。 1 # include <stdio.h> 2 # include <string.h> 3 4 # define MAXN (362880 + 5) 5 6 typedef struct 7 { 8 char a[9]; 9 }state; 10 11 typedef struct 12 { 13 int k; 14 char d; 15 }path; 16 17 path p[MAXN]; 18 const char md[4] = {'u','l','r','d'}; 19 阅读全文

posted @ 2012-05-20 21:33 getgoing 阅读(424) 评论(0) 推荐(0) 编辑

八数码(双向广搜)

摘要: 早上看了提到双向广搜的一篇文章,其中讲了双向广搜可以节约一半的时间和一半的空间(理论上),我画了一幅图:(上面的对应普通BFS,下面的对应双向广搜)可以看出简单BFS的搜索节点大约是双向广搜的二倍。对于八数码问题,由于逆序剪枝可以将所有无解的状态全部剪掉,剩余的都是有解的状态,所以使用双向广搜速度可能会更快;对下面两组数据(分别输入)1 2 3 4 5 6 7 8 08 7 6 5 4 3 2 1 02 6 4 1 3 7 0 5 88 1 5 7 3 6 4 0 2正确输出对应是 30、 31使用BFS的运行时间:0.390s 0.359s使用双广的运行时间:0.109s 0.046s双广我 阅读全文

posted @ 2012-05-20 18:16 getgoing 阅读(4984) 评论(0) 推荐(1) 编辑

2012年5月15日

八数码(BFS)

摘要: 参考白书的方法,将每一个状态映射到一个9位整数,然后再映射到它在所有状态中的大小位置(编码)来减少内存使用;按照 POJ eight这道题的输入形式写的(对空格的处理参考了Staigner大牛的做法:用scanf一个字符串来读取);输入包括初始状态和目标状态,输出为最短距离,如果无解,输出 -1;逆序的剪枝比较难理解:当前状态逆序数+已走步数与目标态逆序数同奇偶则有解,有解状态不会扩展出无解状态,反之也成立,初始状态的逆序数+初始态与目标态之间空格的Manhattan距离与目标态同奇偶择有解,反之无解;LJ 大牛提出了另一种剪枝的方法:将目标态中任意非零数互换位置得到的状态是无解状态可以达到的 阅读全文

posted @ 2012-05-15 22:39 getgoing 阅读(1156) 评论(0) 推荐(0) 编辑

2012年5月11日

POJ 2406 Power Strings

摘要: 白书上看过这道题,枚举即可,530MS左右,这道题分类是 KMP ,可能是用 next 数组。# include <stdio.h># include <string.h>char s[1000005];int check(int i, int t);int solve(int len);int main(){ int len; while (1) { scanf("%s", s); len = strlen(s); if (len == 1 && s[0] == '.') break; else... 阅读全文

posted @ 2012-05-11 11:13 getgoing 阅读(169) 评论(0) 推荐(0) 编辑

字符串模式匹配:POJ 3461 Oulipo

摘要: 这道题是字符串的模式匹配,要求计算出模式串在文本串中出现的次数,比如:"AZA" 在 "AZAZAZA" 中出现了 3 次;这道题使用 KMP 过的,但是 horspool 却不能过,尝试了一下各种方法后,还是回到了麻烦的 KMP,留下了以下几个模版:1. shift-or,据说比 KMP 快两倍,但只适用于模式串在 32 位以内,64位以内的也可以,需要把 b[] 改为 long long int 型,超出范围的可以尝试自己构造长类型……这道题不适用# include <string.h>int b[128]; /* int型共32位,模式 阅读全文

posted @ 2012-05-11 10:43 getgoing 阅读(535) 评论(0) 推荐(0) 编辑

2012年5月6日

POJ 1401 Factorial

摘要: 求 n! 末尾零的个数,在编程之美上看过,其实也不难:求因子2和5的个数取最小值,因为5出现的频率远低于2。# include <stdio.h>int solve(int n);int main(){ int T, n; scanf("%d", &T); while (T--) { scanf("%d", &n); printf("%d\n", solve(n)); } return 0;}int solve(int n){ int t; t = 0; while (n>0) {n /=... 阅读全文

posted @ 2012-05-06 18:25 getgoing 阅读(162) 评论(0) 推荐(0) 编辑

上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 17 下一页

导航