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