- 博客(12)
- 收藏
- 关注
原创 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 1880
原创 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 1593
原创 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 1713
原创 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 1529
原创 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 1558
原创 POJ 2846 解题报告 Trie 树变型
题目意思:给一个待查询的字符串,输出包含这个字符串(作为子串)的个数。数据量比较大,用 KMP 会超时。可以用 Trie 树,不过需要变型。正常的 Trie 树是以前缀开始的。在这题需要改成以后缀开始,后缀指以字符串每个字符作为开始直至结尾。例如字符串 abcdae ,各个后缀是 abcdae,bcdae,cdae,dae,ae,e。这样就很方便查询子串出现的次数了。但是要
2015-07-05 12:20:30 1487
原创 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 1539
原创 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 1514
原创 POJ 2530 解题报告 trie 树
题目意思:给含有两个单词的映射关系的字典,然后查询接下来每个输入字符串的对应字符串。这题可以用 hash 或者 trie 树,都是入门级别。代码://这题是 trie 树 和 哈希 的入门题。#include #include #include #include #include #include using namespace std;#defi
2015-07-04 17:29:27 1579
原创 POJ 2001 解题报告 trie 树
题目意思:就是找能标识每个字符串自身的最短前缀。可以用 Trie 树解决,只需要记录每个结点的访问次数,那么每个字符串的最短前缀,要么就是到访问次数为1的那个字符结点为止的字符串,要么就是遍历完毕还没有遇到访问量为1的字符结点时,最短前缀就是自身。代码:POJ 2001#include #include #define maxn 1010typedef struc
2015-07-04 11:11:09 1464
原创 HDU 3294 解题报告 Manacher 算法
题目意思:对输入的字符串做两步处理,第一步先按要求转换。第二步在转换后的字符串中找出最长的回文子串。最长回文子串可以用 Manacher 算法解决。参考这篇
2015-07-03 16:10:09 1602
原创 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 1378
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人