自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

学无止境

冲啊!!

  • 博客(116)
  • 收藏
  • 关注

原创 acm 常用数据结构与算法专题(未分类均放于此)

并查集:hdu 1232 简单入门第 K 大问题:hdu 1280 简单题,数据很水,可直接用计数排序解题Manacher 算法:HDU 3294 简单题Trie 树:入门题: POJ 2001 POJ 2530 POJ 3630 POJ 1056区间树(线段树):HDU 1166 单点更新 HDU 1754 单点更新 HDU 1394 单点更新,求多排列的最小逆序对数数论:CF LCM

2015-06-28 21:52:28 1797

原创 图算法 专题

判断有向图是否有环: hdu 3342 : 简单判断是否有环

2015-06-18 21:48:20 1554

原创 背包专题

hdu: 2602 Bone Collector这里写链接内容

2015-05-19 16:04:21 591

原创 DP 专题

hdu: 2046 骨牌铺方格 3485 Count 101poj: 1163 The Triangle

2015-05-19 16:02:20 543

原创 UVA题目分类索引

uva好像经常连不上,可以移步到virtual judge做题。列出来的题我都做过,可以在我博客中找到相关的解题报告。本文章保持更新。水题会用蓝色字体标明。字符串类题目:401 10010103615374091087810815 644 10115

2015-04-20 16:03:28 2672

原创 POJ 3264 解题报告 RMQ 问题 ST算法

这道题可以用线段树、树状数组解决,也可以用 ST 算法。题目意思很明显,最大值-最小值就是结果。第一道用 ST 解决的题目。//ST 算法#include #include #define MAXN (50000 + 10)int cows[MAXN];int st_max[MAXN][20];int st_min[MAXN][20];int n, q, l,

2015-07-17 15:58:09 1912

原创 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 1621

原创 Codeforces Round #146 (Div. 1) LCM Challenge 解题报告 数论 找规律

题目链接:http://codeforces.com/problemset/problem/235/A题目意思:找出三个小于 n 的数,这三个数组成的 LCM(最小公倍数)是最大的。首先,这三个数应该是互质的。根据 LCM 的公式 (a * b) / gcd(a,b),gcd(a,b)为1时,即互质,LCM 值是最大的。然后开始找规律:如果是奇数的话(n=7),那么

2015-07-16 11:32:34 1758

原创 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

原创 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 1577

原创 POJ 2846 解题报告 Trie 树变型

题目意思:给一个待查询的字符串,输出包含这个字符串(作为子串)的个数。数据量比较大,用 KMP 会超时。可以用 Trie 树,不过需要变型。正常的 Trie 树是以前缀开始的。在这题需要改成以后缀开始,后缀指以字符串每个字符作为开始直至结尾。例如字符串 abcdae ,各个后缀是 abcdae,bcdae,cdae,dae,ae,e。这样就很方便查询子串出现的次数了。但是要

2015-07-05 12:20:30 1498

原创 POJ 1056 解题报告 Trie 树

这题跟poj 3630一样,也是找前缀,数据更弱。代码:#include #include #define maxn 10#define wlen 10 //单词长度#define character '0'#define size 2 typedef struct node { int cnt; //记录访问量 int child_num; //记录孩子个数

2015-07-05 00:05:55 1552

原创 POJ 3630 解题报告 Trie 树

题目意思:如果某个 number 是另一个 number 的前缀,则 输出 NO。可以用 trie 树,这题有多组数据,要注意清零。代码:#include #include #define maxn 10000#define wlen 10 //number长度#define character '0'#define size 10 typedef str

2015-07-04 21:31:21 1529

原创 POJ 2530 解题报告 trie 树

题目意思:给含有两个单词的映射关系的字典,然后查询接下来每个输入字符串的对应字符串。这题可以用 hash 或者 trie 树,都是入门级别。代码://这题是 trie 树 和 哈希 的入门题。#include #include #include #include #include #include using namespace std;#defi

2015-07-04 17:29:27 1597

原创 POJ 2001 解题报告 trie 树

题目意思:就是找能标识每个字符串自身的最短前缀。可以用 Trie 树解决,只需要记录每个结点的访问次数,那么每个字符串的最短前缀,要么就是到访问次数为1的那个字符结点为止的字符串,要么就是遍历完毕还没有遇到访问量为1的字符结点时,最短前缀就是自身。代码:POJ 2001#include #include #define maxn 1010typedef struc

2015-07-04 11:11:09 1480

原创 HDU 3294 解题报告 Manacher 算法

题目意思:对输入的字符串做两步处理,第一步先按要求转换。第二步在转换后的字符串中找出最长的回文子串。最长回文子串可以用 Manacher 算法解决。参考这篇

2015-07-03 16:10:09 1611

原创 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 1388

原创 HDU 1232 解题报告 并查集入门

题目意思:能连通的城市放置到同一个集合中,最后输出集合的个数减一即可。

2015-06-28 21:49:02 1562

原创 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 1486

原创 HDU 5272 解题报告

这是一道 bestcoder round45 的1001题。 简单题,找出二进制中连续的1有多少个就可以了。代码链接:HDU 5272

2015-06-21 11:01:01 1522

原创 HDU 3342 解题报告

这是一题简单的判断有向图是否有环。 参考《算法导论》22章里用白、灰、黑三色标记结点的方法,在深搜的时候只要发现下一个结点是灰色的就说明有环。代码链接:HDU 3342 用 dfs 解题还可以用拓扑做此题。 代码链接:HDU 3342 用拓扑解题

2015-06-18 21:46:19 1480

原创 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 1554

原创 HDU 1025 解题报告

这是一道 LIS (最长升序子序列)的问题。 这题是不需要考虑元素重复的情况。 数据比较大,需要用 O(nlogn)才能解题。 注意输出有 load和 loads 的坑。。。代码链接:HDU 1025

2015-05-22 23:19:01 1637

原创 HDU 2046 解题报告

这是一题简单的递推题,可以用 dp 解题。递推公式: F(i) = F(i-1) + F(i-2)需要注意这题50时会爆 int。所以用__int64代码链接:HDU 2046

2015-05-19 15:55:13 901

原创 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 791

原创 POJ 1163 解题报告

题目意思: 在 Triangle中从上到下,按照规则走,找出路径最大值。思路: 这题可以用 DP 去解。 子问题定义为 F(i, j)。 i 是行数, j 是列。 F(i, j)的值是从第 i 行第 j 列开始的 Triangle 的路径最大值,即问题的解。得出递归公式是: F(i, j) = A[i][j] + max{F(i+1, j), F(i+1, j+1)}代码链接:POJ 116

2015-05-15 22:23:11 543

原创 UVA 400 解题报告

题目意思: 就是输出 input 里面的文件名。 文件名直接排序即可,没难度。 这题难在输出。要注意,ls 的输出是怎么样。我就在这里 wa 了好几次,怎么想要不明白,后面才发现我理解的输出形式与 ls 的不一样的。 ls 的输出形式是:从左至右,从上到下的升序输出。代码链接:UVA 400

2015-04-26 23:57:40 1073

原创 UVA 10785 解题报告

题目意思: 按照命理家给出的规则起一个名字。 规则: 1. 名字所以的元音和辅音加起来的值要最小。 2. 元音在偶数位,辅音在奇数位。 3. 辅音元音辅音元音辅音元音这样的形式。不得有连续二个或以上的元音或辅音。 4. 同一个辅音字母不得超过5个。原因不得超过21个。 5. 输出的名字应该是字典序最小的。 6. 名字应该是值最小,然后才是字典序最小的。代码链接:UVA 10785

2015-04-26 10:30:50 464

原创 UVA 123 解题报告

题目意思: 就是根据 word 进行字典序排序输出 titile。只是title 中的某些 word 要进行ignore。代码链接:UVA 123

2015-04-25 21:36:55 549

原创 UVA 120 解题报告

题目意思: 给出一序列。问需要翻转那些位置的元素能够使到序列变为升序。输出这些位置。最后加一个0.解法:每次取出下一个最大的数,如果这个数当前的位置是合法的,就 continue。否则就根据这个元素的位置进行选择翻转。代码链接:UVA 120

2015-04-24 10:47:09 1027

原创 UVA 156 解题报告

题目意思: 找出出现次数仅一次的字符串。用 C++的 map 也很方便解决这题。注意点: 1. 输出时候是大小写敏感的。 2. 两个字符串,只要所组成是一样的就意味着是相等的字符串。哪怕顺序不一样或分别是大小写。代码链接:UVA 156

2015-04-23 11:40:37 972

原创 UVA 755 解题报告

题目意思: 找出重复的电话号码,并输出重复次数。用 c++的 map。打个字母到数字的映射。就可以直接粗暴地解决这题了。注意点: 1. 不同测试集中间的输出要加一空行。最后一个不需要。代码链接:UVA 755

2015-04-23 09:57:10 528

原创 UVA 299 解题报告

题目意思: 这题真是好水水水呀。。 就是排序,然后统计交换元素的次数。冒泡的思想。代码链接:UVA 299

2015-04-22 20:17:14 530

原创 UVA 152 解题报告

题目意思: 简单来说,就是求一棵树的最邻近的树。然后与这课树的距离是否在[0,10)之间,如果是就统计起来并输出。 PS:是不是水题题目都那么的绕。得看好一会儿才能明白意思,有些题目还得查查意思 - -注意点: 1. 输出用 “%4d”。不然会 pesentation error.代码链接:UVA 152

2015-04-22 19:46:55 429

原创 UVA 10474 解题报告

题目意思: 简单来说,就是在以升序排序后的 N 里面找到每一个 Q的位置,按照规定格式输出。用 c++做的话思路就十分显浅了,用 vector 即可。代码链接:UVA 10474

2015-04-22 15:43:01 613

原创 UVA 10420 解题报告

题目意思: 简单来说,就是直接统计国家名字出现的次数。使用 c++的 map 就可以很方便的 ac 这道题。输出时候因为 map 内部实现的特性,所以直接用迭代器输出的时候就是按照 key 的‘<’的操作进行输出。代码链接:UVA 10420

2015-04-22 12:48:26 615

原创 UVA 10106 解题报告

题目意思: 模拟大整数的乘法,两个数都是大整数。注意点: 1. 注意任意一个数是零时的处理。 2. 注意前导零的处理。代码链接:UVA 10106

2015-04-21 17:26:14 523

原创 UVA 424 解题报告

题目意思: 就是数个大整数相加,然后输出结果。注意点: 1. 输出需要加’\n’,不然会 WA。 2. 要注意前导零这些情况的处理。 3. 最左边的进位也要注意处理。代码链接:UVA 424

2015-04-21 16:34:49 682

原创 UVA 10494 解题报告

题目意思: 模拟除法运算。注意点: 1. 除数可以直接用 long long int 保存。 2. 用数组存储商的话,要注意前导零的处理。和被除数小于除数的处理。代码链接:UVA 10494

2015-04-21 11:03:26 696

原创 UVA 644 解题报告

题目意思: 判断 set 里面是否有出现某个 code 是另一个 code 的前缀。 这题用 strncmp() 很好解决。注意点: 1. 输入的数据不会按照由小到大的。代码链接:UVA 644

2015-04-20 15:31:34 583

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除