摘要: 题目:http://acm.hdu.edu.cn/showproblem.php?pid=2108题目大意:给出点数n, 逆时针顺序给出n个点的坐标,都为整数,判断所围多边形是凸的还是凹的。思路:按照逆时针顺序连出向量p0p1,p1p2,p3p4……若是凸多边形,那么b相对于a一定是向逆时针方向旋转的,判断两向量的旋转方向,可以使用向量的叉积a×b= x1×y2- x2×y1。自己想了好久不会,看了别人的题解,发现思路还是很清晰的……提交情况:AC 1次AC code :View Code 1 #include <stdio.h> 2 3 #inclu 阅读全文
posted @ 2011-07-20 16:32 cloehui 阅读(311) 评论(0) 推荐(0) 编辑
摘要: 题目:http://acm.hdu.edu.cn/showproblem.php?pid=3857题目很长,都是废话,就是找数组下表和值相同的数值。提交情况:WA n次, AC 1次总结:水题啊!大水题!突然想用'\b'退格键来处理最后一个数的格式,结果一直WA。因为输出了答案中不存在的字符,所以会WA。最后终于放弃退格,安分的分情况处理格式了。AC code:View Code 1 #include <stdio.h> 2 3 4 5 #define MAXN (10000 + 100) 6 7 8 9 int num[MAXN];10 11 12 13 void 阅读全文
posted @ 2011-07-20 16:31 cloehui 阅读(223) 评论(0) 推荐(0) 编辑
摘要: View Code 1 #include <cstdio> 2 3 #include <cstdlib> 4 5 #include <cstring> 6 7 8 9 #define MAXN (100000 + 100) 10 11 #define I64 __int64 12 13 14 15 int a[MAXN], f[MAXN]; 16 17 I64 head, tail; 18 19 I64 nowh, nowt; 20 21 I64 res; 22 23 24 25 void Clear() { 26 27 memset(a, 0, sizeo 阅读全文
posted @ 2011-07-20 16:30 cloehui 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 题目:http://poj.org/problem?id=3259题目大意:有F个fields,N条正常的路径,W个虫洞,走正常路径耗时,走虫洞减时。要从原点走一条回路,满足再回到原点时所用时间和小于0思路:Bellman-Ford判断从源点可达的负权回路算法:Bellman-Ford提交情况:WA n次, AC 1次总结:正常路径是双向的,虫洞是单向的。所以最多一共有(2 * M + W)条路,先开始数据开小了。AC code :View Code 1 #include <cstdio> 2 3 #include <cstring> 4 5 #include < 阅读全文
posted @ 2011-07-20 16:30 cloehui 阅读(276) 评论(0) 推荐(0) 编辑
摘要: 题目:http://poj.org/problem?id=1861题目大意:要用最短的电缆把所有的电脑都连接起来。算法:Kruscal+并查集思路:常规Kruscal+并查集。先开始没注意到是SPJ,看样例输出一个环很是疑惑,纠结了半天,看了discuss,才知道是样例的问题……不用管样例,常规做就好提交情况:1次ACAC code:View Code 1 #include <cstdio> 2 3 #include <cstdlib> 4 5 #include <cstring> 6 7 #include <algorithm> 8 9 usi 阅读全文
posted @ 2011-07-20 16:29 cloehui 阅读(294) 评论(0) 推荐(0) 编辑
摘要: 题目:http://poj.org/problem?id=2395题目大意:找到连接所有农场的最小生成树,并找到其中最长的一条路。算法:Kruskal+并查集提交情况:1次AC思路:很裸的Kruskal+并查集,连边数都给出来了。建立边集,常规Kruskal+并查集,记录当前最小生成树中最大边。AC codeView Code 1 #include<stdio.h> 2 3 #include<stdlib.h> 4 5 #include<string.h> 6 7 #include<algorithm> 8 9 using namespace s 阅读全文
posted @ 2011-07-20 16:27 cloehui 阅读(261) 评论(0) 推荐(0) 编辑
摘要: 题目:http://acm.hdu.edu.cn/showproblem.php?pid=1061题目大意:求n^n的最右位。提交情况:n次WA。总结:记得每次都要取模,否则会溢出。特殊当 n== 0,输出1。思路:快速幂求n^n,每运算一次要模10。AC code:View Code 1 #include <cstdio> 2 3 #include <cstdlib> 4 5 #define I64 __int64 6 7 8 9 int Fuction(I64 n) {10 11 int res = 1;12 13 I64 b = n;14 15 if(!n) // 阅读全文
posted @ 2011-07-20 16:26 cloehui 阅读(278) 评论(0) 推荐(0) 编辑
摘要: 题目:http://poj.org/problem?id=1258题目大意:多组测试用例,找出连接所有农场的最短路径。算法:最小生成树 + 并查集。提交情况:1次WA,1次RE,1次AC。总结:没注意到多组用例;边集一定要开够。思路:建立无向图,用上三角矩阵表示,并查集 + Kruskal建最小生成树,记录总长度。AC code:View Code 1 #include <stdio.h> 2 3 #include <stdlib.h> 4 5 #include <string.h> 6 7 #include <algorithm> 8 9 us 阅读全文
posted @ 2011-07-20 16:25 cloehui 阅读(264) 评论(0) 推荐(0) 编辑
摘要: 题目:http://poj.org/problem?id=2485题目大意:输入各城镇之间的距离,求最小生成树中最长的边。算法:最小生成树。提交情况:3次RE,1次AC总结:边集一定要开大。思路:建立无向图,用上三角矩阵表示,并查集 + Kruskal建最小生成树,记录树中最长边。AC code:View Code 1 #include <stdio.h> 2 3 #include <stdlib.h> 4 5 #include <string.h> 6 7 #include <algorithm> 8 9 using namespace std 阅读全文
posted @ 2011-07-20 16:23 cloehui 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 题目:http://acm.hdu.edu.cn/showproblem.php?pid=3853题目大意:二维地图,分成r*c的方格,从左上角走到右下角,在每个格内有一定的概率停在原地,右移一格,下移一格,三种情况概率和为1。每次移动(包括停在原地)耗费两点魔法值。求从起点到终点所耗魔法值的期望。算法:dp思路:期望公式 E = x1 * p1 + x2 *p2 + …… +xn * pn 假设每格内停在原地概率为map[i][j].x,右移一格概率为map[i][j].y,下移一格概率为map[i][j].z;exp[i][j] 为从起点走到ij格所耗魔法值的期望。 同时可以得知exp[r 阅读全文
posted @ 2011-07-20 15:58 cloehui 阅读(243) 评论(0) 推荐(0) 编辑
摘要: 题目:http://acm.hdu.edu.cn/showproblem.php?pid=1201一道水题,简单的判断闰年就好了。思路 : 17年的全年天数,加上第1年生日后的天数和第18年生日前的天数,就是到达18岁所需天数。如果18岁那年是平年,而且是2月29日的生日,就没有18岁生日,输出-1。AC code:View Code 1 #include <stdio.h> 2 #include <stdlib.h> 3 int year, month, day; 4 int year1, year18, day1, day2, days; 5 int S_Day(i 阅读全文
posted @ 2011-07-20 13:14 cloehui 阅读(514) 评论(0) 推荐(0) 编辑
摘要: 题目:http://acm.hdu.edu.cn/showproblem.php?pid=1241题目大意:简单的dfs~ 搜索地图,每找到一个油田,就搜索八个方向,将连着的油田标记为同一个。算法:dfsAC code:View Code 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #define MAXN (100 + 10) 5 char map[MAXN][MAXN]; 6 int oil; 7 int m, n; 8 9 int dx[8] = {-1,-1,- 阅读全文
posted @ 2011-07-20 13:12 cloehui 阅读(296) 评论(0) 推荐(0) 编辑
摘要: 题目:http://acm.hdu.edu.cn/showproblem.php?pid=2047开心~~第一次完全自己做出来的递推~~虽然想的过程有些纠结,但是规律毕竟是找出来了。思路:f[i]表示长度为i时的方案数, o[i]表示长度为i时所有方案中末位字母是o的个数.1)当长度n = 1时,有三种涂法 : E、 O、 F. f[1] = 1.其中O的个数为1, o[1] = 1.2)当长度n = 2时,E、 F分别又对应出3种情况(E、O、F), O对应出两种情况(E、F),因为不能有OO出现.末位O的个数o[2] = 2.f[2] = 3 * f[1] - 1 = 3 * f[1] - 阅读全文
posted @ 2011-07-20 13:10 cloehui 阅读(442) 评论(0) 推荐(0) 编辑
摘要: 题目:http://acm.hdu.edu.cn/showproblem.php?pid=2046知道应该用递归递推来做,但是一直找不到规律……拖了好久,终于决定今天做完。苦思无果搜题解,发现代码只有几行…… 递推递归果然神奇啊!!!思路:f(1)=1,f(2)=2,f(3)=5,当有n个方格的时候,有两种铺法: 1)先铺好n-1个格,有f(n-1)个方法,再铺第n层的时候只有一种方法,所以总方法是1*f(n-1); 2)先铺好n-2格,有f(n-2)个方法,再铺后面两层的时候只能两个都横着铺(否则与第一种情况重复),所以也只有一种情况,总方法数是1*f(n-2)再没有其他情况了。 推出f(n 阅读全文
posted @ 2011-07-20 13:07 cloehui 阅读(543) 评论(0) 推荐(0) 编辑
摘要: 题目:http://acm.hdu.edu.cn/showproblem.php?pid=1089 一共八道题目,题目都不难, 就是为了练习输入输出,题目之间的联系也很多,稍微改动一点点就可以了。题目都看的懂,我就不多说了哈…… 贴代码…… 注意随后一题要求 每个输出“之间”有空行,最后一行的后面没有空行AC code:View Code 1 // A + B (1) 2 3 4 5 #include <stdio.h> 6 #include <stdlib.h> 7 int main () { 8 int a, b; 9 while (~scanf ("%d 阅读全文
posted @ 2011-07-20 11:18 cloehui 阅读(514) 评论(0) 推荐(0) 编辑
摘要: 题目:http://poj.org/problem?id=1664自己想了半天,什么排列组合之类的,后来去搜题解,才知道是用递归…… 强大啊……个人感觉递归好神奇啊,反正就是一次一次调用然后结果就出来了,不用去想它具体是怎么实现的。 这题的思想是找递归关系,我们不妨令f(m,n)表示m个苹果放到n个盘子里有多少种放法,下面对不同的情况给予讨论:(1):当盘子数为1的时候,只有一种放法就是把所有苹果放到一个盘子里。(2):当苹果数为1的时候,也只有一种放法,注意题目中说明,盘子之间并无顺序,所以不管这个苹果放在哪个盘子里,结果都算一个。(3):当m<n时,因为此时最多只能放到m个盘子中去( 阅读全文
posted @ 2011-07-20 11:10 cloehui 阅读(779) 评论(0) 推荐(1) 编辑
摘要: 题目:http://poj.org/problem?id=1163动态规划入门题~~ 在很长一段时间内,我的dp水平都停留在只会写数塔……选择一条路径从底加到顶,对每一个点num[i][j]来说,都可以从num[i+1][j] 和 num[i+1][j+1]中选一个加上来。如果每一次都加其中大的,并更新当前值,那么一直加到顶部,那个数必然是最大的。我的理解就是,每步都取最优解,所以最后的解也是最优的。AC code: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #define MAX 100 + 10 4 int main 阅读全文
posted @ 2011-07-20 11:03 cloehui 阅读(286) 评论(0) 推荐(0) 编辑
摘要: 题目:http://poj.org/problem?id=1269题目大意:给出四个点确定两条直线。如果是一条线输出“LINE”,如果平行输出“NONE”, 如果有交点输出交点坐标。思路:注意是直线,不是线段啊。用两点式推出两条直线方程 : (y1 - y2)x + (x2 - x1)y = x2y1 - x1y2; (y3 - y4)x + (x4 - x3)y = x4y3 - x3y4; 又由Cramer法则: a1x + b1y = c1; a2x + b2y = c2; D = a1b2 - a2b1; D1 = c1b2 - c2b1; D2 = a1c2 - a2c1; D != 阅读全文
posted @ 2011-07-20 11:01 cloehui 阅读(425) 评论(0) 推荐(0) 编辑
摘要: 题目:http://poj.org/problem?id=2231个人认为这是一道水题……先输入N表示有N头牛,接下来的N个数是各个牛所在的位置。如果一头牛对另一头牛Moo,那么Moo数就是1号牛所在位置i与2号牛所在位置j的差值,又因为1号牛Moo过去,所以2号牛也要Moo回来,于是Moo数就变为2倍了。1号牛要对剩余所有(N-1)头牛都Moo,如果我们将牛按顺序排好,每头牛i只对它身后的(N-i)头牛Moo,意思是,我们只考虑某头牛Moo出去的,而不考虑别的牛对它Moo回来的,那么它也不对在它前面的牛Moo,那么这就是一个简单的数学问题,每头牛i只对身后的(N-i)头牛Moo。因为所有牛还 阅读全文
posted @ 2011-07-20 10:57 cloehui 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 题目:http://poj.org/problem?id=1088据说是一道很经典的dp入门题我的做法是用一个二维数组储存原始数据,然后对每个点调用一个递归函数,寻找周围四个方向的最长路径,加1作为这个点的最长路径。递归的方法是,对周围的四个点,如果点在地图内且高度下降,再找这个点的四个方向上的点,于是当达到边界或是某点已经被计算过,递归结束,返回最长路径值。所以这里还用到了记忆化搜索,对于每个点,都要记录这个点的最长路径值,这样就避免重复计算,是一种用空间换时间的做法。 对地图中的每个点都要调用子函数递归计算该点可以达到的路径最大值。然后比较出一个最大的作为该地图的最长路径。 要注意地图边界 阅读全文
posted @ 2011-07-20 10:51 cloehui 阅读(863) 评论(0) 推荐(0) 编辑