hdu
cbsheng
这个作者很懒,什么都没留下…
展开
-
HDU 5272 解题报告
这是一道 bestcoder round45 的1001题。 简单题,找出二进制中连续的1有多少个就可以了。代码链接:HDU 5272原创 2015-06-21 11:01:01 · 1522 阅读 · 0 评论 -
hdu_2039_三角形_解题报告
题目出处简单题思路:根据 a + b > c ; c + a > b ; c + b > a ; 如果上述三条式子都成立则为三角形关键代码:double a[3];if (a[0]+a[1]>a[2] && a[1]+a[2]>a[0] && a[2]+a[0]>a[1] ? puts("YES") : puts("NO") );原创 2013-04-09 15:42:48 · 888 阅读 · 0 评论 -
hdu_2003_求绝对值_解题报告
题目出处简单题思路:调用库函数解决。需要注意的是此题输入是的实数而不是整数,所以调用的函数应该是 fabs() 而不是abs()关键代码:#include printf("%0.2f\n", fabs(input));原创 2013-04-04 10:51:21 · 955 阅读 · 0 评论 -
hdu_2000_ASCII码排序_解题报告
题目出处简单题思路:题目要求是从小到大,即升序排列解决此题可以自己写排序函数,但是我觉得这里用库函数会更好,而且对于初学者而言,也要懂得灵活运用库函数这里使用了 C标准库的qsort()关键代码:int cmp(const void *a, const void *b){ return *(char*)a > *(char*)b ? 1 : 0;}原创 2013-04-02 14:17:20 · 923 阅读 · 0 评论 -
HDU Count 101 解题报告
题目意思: 找出所有不含有“101”子串的个数这题可以用 DP。 用 DP[i]代表长度为 i 时的不含有“101”子串的个数。 观察可以发现,DP[i] = 2*DP[i-1] - 以“10”结尾的 DP[i-1]个数。 而 以“10”结尾的 DP[i-1]个数 是 以“0”结尾的 DP[i-1]个数 减去 以“0”结尾的 DP[i-2]个数。 任意一个 DP[i],以“0”结尾的个数有原创 2015-06-14 21:32:46 · 1546 阅读 · 0 评论 -
hdu_2033_人见人爱A+B_解题报告
题目出处简单题思路:就是两个时间的叠加,注意 分 和 秒 需要满60进1,而 时 是不断叠加上去的所以解法就着重在 分 和 秒 的处理,用 / 和 % 运算符即可关键代码:am += bm, as += bs, ah += bh;am += as / 60;as = (as % 60);ah += am / 60;am = (am % 60);原创 2013-04-04 16:48:06 · 1413 阅读 · 0 评论 -
HDU 1232 解题报告 并查集入门
题目意思:能连通的城市放置到同一个集合中,最后输出集合的个数减一即可。原创 2015-06-28 21:49:02 · 1550 阅读 · 0 评论 -
HDU 1280 解题报告 第 K 大
求第 K 大的一道题,题目意思很直白,数据也比较水,没有负数。所以可以直接用计数排序解决。代码:#include #define MMAX 5003#define NMAX 3000int count[MMAX * 2];int N[NMAX];int main(){ int n, m, max; while (scanf("%d %d", &n, &m) !=原创 2015-07-01 07:30:09 · 1387 阅读 · 0 评论 -
HDU 3294 解题报告 Manacher 算法
题目意思:对输入的字符串做两步处理,第一步先按要求转换。第二步在转换后的字符串中找出最长的回文子串。最长回文子串可以用 Manacher 算法解决。参考这篇原创 2015-07-03 16:10:09 · 1610 阅读 · 0 评论 -
HDU 1754 解题报告 线段树 单点更新
线段树入门题,单点更新。每个结点存储两个孩子最大者即可。//线段树单点更新,完全二叉树解法#include #define MAXN 200000#define lson rt<<1#define rson rt<<1|1int top[MAXN * 4 + 100];int students[MAXN + 10];int k;void pushup(int rt){原创 2015-07-15 10:38:30 · 1537 阅读 · 0 评论 -
HDU 1166 解题报告 线段树
这是一题线段树的入门题,主要是点更新。编码用的是完全二叉树,即数组,用链表会超时。其次用 p #include #define maxn 50000//4倍大小是一个合适的值int ns[maxn * 4 + 100];int nums[maxn]; //完全二叉树存储区间树void build(int p, int l, int r){ if (l == r) {原创 2015-07-14 23:25:01 · 1567 阅读 · 0 评论 -
HDU 2046 解题报告
这是一题简单的递推题,可以用 dp 解题。递推公式: F(i) = F(i-1) + F(i-2)需要注意这题50时会爆 int。所以用__int64代码链接:HDU 2046原创 2015-05-19 15:55:13 · 891 阅读 · 0 评论 -
hdu_2001_计算两点间的距离_解题报告
题目出处简单题思路:很简单,直接套用数学公式就行了 (出处)对于数学公式中的平方和开方,C标准库(math.h)同样的提供了数学函数 pow() 和 sqrt()关键代码:result = sqrt(pow((x1-x2), 2) + pow((y1-y2), 2)); printf("%.2f\n", result);原创 2013-04-02 14:25:35 · 1567 阅读 · 0 评论 -
hdu_2004_成绩转换_解题报告
题目出处简单题思路:这题应该是学习后C的 switch 或 if-else-if 语法后经常做的题目类型所以此题用上述两种分支语句都能解题,而初学者可能多数这样做:if (input > 100 || input < 0){ printf("Score is error!\n");}else if (input >= 90 && input <= 100) print原创 2013-04-04 11:04:49 · 1189 阅读 · 0 评论 -
HDU 3573 解题报告
这题需要注意,75被裁剪之后所剩余不能用于下一次。三种票:28 + 20 * 2 32 + 20 * 2 20 * 3 28 * 2 32 * 2 28 + 32 先用完长度20的,用它去与28或32组合,然后,再根据长度20所剩的大小去计算。代码链接:HDU 3573原创 2015-06-26 20:58:15 · 1485 阅读 · 0 评论 -
HDU 3342 解题报告
这是一题简单的判断有向图是否有环。 参考《算法导论》22章里用白、灰、黑三色标记结点的方法,在深搜的时候只要发现下一个结点是灰色的就说明有环。代码链接:HDU 3342 用 dfs 解题还可以用拓扑做此题。 代码链接:HDU 3342 用拓扑解题原创 2015-06-18 21:46:19 · 1472 阅读 · 0 评论 -
hdu_2031_进制转换_解题报告
题目出处简单题思路:将十进制的32位整数转换成其他进制,这个可以用余数定理,关于进制转换的文章谷歌一下已很多,这里不详述此题解法可以采用最简单最直接想到的方法,就是保存转换后的数,再倒序输出,可以利用打表技巧输出:char table[] = "0123456789ABCDEF";另一个解法就是用栈,前几次的计算的结果不输出,压栈,直到最后的数为零时终止并向上返回,这原创 2013-04-03 10:27:28 · 1102 阅读 · 0 评论 -
hdu_2030_汉字统计_解题报告
题目出处简单题思路:题目已有提示([Hint:]从汉字机内码的特点考虑~)因为当系统中同时存在ASCII码和汉字国标码时,将会产生二义性。所以为了消除这二义性,就需要进行一些处理:汉字机内码 = 汉字国标码 + 8080H意思就是把国标码的每个字节最高位置1这样做的效果,就会使到单个字节变成负数。所以此题的解法只需判断是否为负数即可关键代码:char原创 2013-04-01 21:58:05 · 1032 阅读 · 0 评论 -
hdu_Palindromes _easy version_解题报告
题目出处简单题思路:回文串题。这里有一篇是用递归解回文串。当然可以用循环解题关键代码:int len = strlen(str);for (i = 0; i < len / 2; i++) { if (str[i] != str[len - 1 - i]) { // do something }}原创 2013-03-31 19:13:13 · 1072 阅读 · 0 评论 -
HDU 1025 解题报告
这是一道 LIS (最长升序子序列)的问题。 这题是不需要考虑元素重复的情况。 数据比较大,需要用 O(nlogn)才能解题。 注意输出有 load和 loads 的坑。。。代码链接:HDU 1025原创 2015-05-22 23:19:01 · 1635 阅读 · 0 评论 -
hdu_2002_计算球体积_解题报告
题目出处简单题思路:与hdu2001一样,套公式即可r:球体的半径关键代码:#define PI 3.1415927result = 4.0 / 3.0 * PI * pow(r, 3);printf("%.3f\n", result);原创 2013-04-04 10:45:53 · 1579 阅读 · 0 评论 -
hdu_Lowest Common Multiple Plus_解题报告
题目出处简单题思路:求 最小公倍数,有其公式可用 (出处)就是 最小公倍数 = |a * b| 除以 (a与b的最大公约数)此题的问题就转化为如何求 最大公约数 同样, 最大公约数 也是用欧几里得算法(辗转相除法)例如(出处)计算a = 1071和b = 462的最大公约数的过程如下:从1071中不断减去462直到小于46原创 2013-03-31 19:28:29 · 1037 阅读 · 0 评论 -
HDU 2602 解题报告
题目意思: 这是一道无变型的经典基础01背包问题。递推公式: F(i, j) : i 个骨头, j 的体积限制时的背包的最大价值 V[i] : 第 i 个骨头的体积 N[i] :第 i 个骨头的价值 F(i, j) = max{F(i-1, j), F(i-1, j-V[i]) + N[i]}注意这题的数据会有骨头体积为0却有价值的情况。代码链接:HDU 2602原创 2015-05-18 07:51:47 · 788 阅读 · 0 评论 -
hdu_2040_亲和数_解题报告
题目出处简单题思路:首先你得知道什么亲和数, 了解清楚之后,那就用最直接的想法解题:分别对两个数求出各自所有的真约数,然后相加对比关键代码:// 返回1是YES, 反之是NOint fun(long a, long b){ int i; long asum = 1, bsum = 1; long temp = a > b ? a/2 :原创 2013-04-24 22:19:07 · 1054 阅读 · 1 评论 -
HDU 1394 解题报告 线段树 单点更新
求逆序对常用方法是归并排序,当然线段树也可以解决,但是空间复杂度就会更大。这题两者都可用。因为只需要第一次求出逆序对数即可,后面的排列都可以推出来。具体怎么推?假设 sum 是第一次求出来的逆序对。 第一次排列是 1 3 6 9 0 8 5 7 4 2那么,第二次就会是3 6 9 0 8 5 7 4 2 11 被放到末尾,自然需要在 sum 上减去包括1原创 2015-07-16 19:37:36 · 1611 阅读 · 0 评论