随笔分类 -  数据结构

摘要:题目传送门 题意:n个数,两种操作,一是每个数字加x,二是查询& (1 << T) == 1 的个数 分析:因为累加是永远的,所以可以离线处理。树状数组点是c[16][M] 表示数字x%(1 << j) 后的数字pos,考虑第j位的个数。当询问时根据add不同的值不同的处理情况。 #include 阅读全文
posted @ 2016-02-26 18:51 Running_Time 阅读(299) 评论(0) 推荐(0)
摘要:居然补完了 组合 A - Far Relative’s Birthday Cake import java.util.*; import java.io.*; public class Main { public static void main(String[] args) { Scanner c 阅读全文
posted @ 2016-02-23 13:29 Running_Time 阅读(238) 评论(0) 推荐(0)
摘要:1001 Rikka with Chess ans = n / 2 + m / 2 1002 Rikka with Graph 题意:n + 1条边,问减去至少一条使剩下的图连通的方案数。 分析:原来暴力选一条或两条就行了,脑子笨了。判连通用BFS或并查集,此题并查集更好 #include <cst 阅读全文
posted @ 2016-02-21 19:35 Running_Time 阅读(172) 评论(0) 推荐(0)
摘要:题目传送门题意:训练指南P246分析:主要是第二种操作难办,并查集如何支持删除操作?很巧妙的方法:将并查集树上p的影响消除,即在祖先上(sz--, sum -= p),然后为p换上马甲:id[p] = ++pos(可多次),这样id[p]就相当于是新的一个点,那么在Find(x)寻找祖先时要用x的马... 阅读全文
posted @ 2016-01-14 16:16 Running_Time 阅读(216) 评论(0) 推荐(0)
摘要:题目传送门题意:训练指南P245分析:首先这道是经典的并查集题目,利用异或的性质。异或性质:x ^ 0 = x -> a ^ a = 0 -> x ^ a ^ a = x,即一个数对某个数异或偶数次等于它本身。第一种操作:p = v,设立一个超级根节点RT,rt[p] = RT, edge[p] =... 阅读全文
posted @ 2016-01-14 15:54 Running_Time 阅读(414) 评论(0) 推荐(0)
摘要:题目传送门题意:训练指南P218分析:一行一行的插入,一行一行的匹配,当匹配成功时将对应子矩阵的左上角位置cnt[r][c]++;然后统计 cnt[r][c] == x 的数量#include using namespace std;const int N = 1e3 + 5;const int N... 阅读全文
posted @ 2016-01-12 11:20 Running_Time 阅读(227) 评论(0) 推荐(0)
摘要:题目传送门题意:训练指南P217分析:没有模板串也就是在自动机上走L步,不走到val[u] == v的节点的概率PS:边读边insert WA了,有毒啊!#include using namespace std;const int K = 20 + 5;const int L = 100 + 5;c... 阅读全文
posted @ 2016-01-12 11:16 Running_Time 阅读(251) 评论(0) 推荐(0)
摘要:题目传送门题意:训练指南P216分析:求出现最多次数的字串,那么对每个字串映射id,cnt记录次数求最大就可以了。#include using namespace std;const int N = 150 + 5;const int NODE = N * 70;const int LEN = 1e... 阅读全文
posted @ 2016-01-12 11:07 Running_Time 阅读(174) 评论(0) 推荐(0)
摘要:水A- Bulbs#include using namespace std;typedef long long ll;const int N = 1e5 + 5;const int INF = 0x3f3f3f3f;bool vis[110];int main(void) { memset (vis... 阅读全文
posted @ 2016-01-10 19:32 Running_Time 阅读(194) 评论(0) 推荐(0)
摘要:题目传送门题意:给出一个200 * 50000的像素点矩阵,执行50000次操作,每次把一个矩形/圆形/菱形/三角形内的像素点涂成指定颜色,问最后每种颜色的数量。分析:乍一看,很像用线段树成段更新写,虽然复杂度有点大,但是也想不到其他的方法.这题可以巧妙地运用并查集来涂色.离线,从最后一个倒过来涂色... 阅读全文
posted @ 2016-01-08 14:58 Running_Time 阅读(277) 评论(0) 推荐(0)
摘要:题目传送门题意:(训练指南P209) 问长字符串S能由短单词组成的方案数有多少个分析:书上的做法。递推法,从后往前,保存后缀S[i, len-1]的方案数,那么dp[i] = sum (dp[i+len(s)])。用字典树记录并查询短单词的前缀的长度。#include using namespace... 阅读全文
posted @ 2015-12-23 22:23 Running_Time 阅读(173) 评论(0) 推荐(0)
摘要:题目传送门题意:询问所有字符串的比较次数和(注意for循环内的比较也算)分析:将所有字符串插入到字典树上,然后结点信息记录有几个字符串,那么每走到一个结点就能知道比较到此时需要的次数。学习到链表存结点#include using namespace std;typedef long long ll;... 阅读全文
posted @ 2015-12-19 19:42 Running_Time 阅读(232) 评论(0) 推荐(0)
摘要:题目传送门题意:训练指南P207分析:因为矩阵不超过20行,所以可以建20条线段的线段树,支持两个区间更新以及区间查询.#include using namespace std;#define lson l, mid, o b) a = b; } void push_up(int o) { no... 阅读全文
posted @ 2015-12-15 13:35 Running_Time 阅读(258) 评论(0) 推荐(0)
摘要:题目传送门题意:训练指南P197分析:枚举裁判的位置,用树状数组来得知前面比它小的和大的以及后面比它小的和大的,然后O (n)累加小 * 大 + 大 * 小 就可以了#include using namespace std;typedef long long ll;const int N = 1e5... 阅读全文
posted @ 2015-12-07 20:42 Running_Time 阅读(191) 评论(0) 推荐(0)
摘要:题目传送门题意:训练指南P192分析:主要就是一个在路径压缩的过程中,更新点i到根的距离#include using namespace std;const int N = 2e4 + 5;struct DSU { int rt[N], d[N]; void init(void) { memset... 阅读全文
posted @ 2015-12-07 19:07 Running_Time 阅读(225) 评论(0) 推荐(0)
摘要:题目传送门题意:训练指南P191分析:本题特殊,n个物品,n种元素则会爆炸,可以转移到图论里的n个点,连一条边表示u,v元素放在一起,如果不出现环,一定是n点,n-1条边,所以如果两个元素在同一个集合就会爆炸.#include using namespace std;const int N = 1e... 阅读全文
posted @ 2015-12-07 18:55 Running_Time 阅读(207) 评论(0) 推荐(0)
摘要:完整代码:插入,查找,删除struct BST { int val; BST *lch, *rch; BST *insert(BST *p, int x) { if (p == NULL) { BST *t = new BST; //ne... 阅读全文
posted @ 2015-12-01 22:25 Running_Time 阅读(357) 评论(0) 推荐(0)
摘要:题目传送门题意:输入一大堆字符串,问字典序输出每个字符串占的百分比分析:二叉搜索树插入,然后中序遍历就是字典序,这里root 被new出来后要指向NULL,RE好几次.这题暴力sort也是可以过的...//#include #include #include #include using names... 阅读全文
posted @ 2015-12-01 22:20 Running_Time 阅读(247) 评论(0) 推荐(0)
摘要:题目传送门 题意:从n个数中选出不同的三个数a b c,使得(a+b)^c 最大 分析:先将所有数字按位插入到字典树上,然后删除两个数字,贪心询问与剩下的数字最大异或值。 阅读全文
posted @ 2015-11-11 15:02 Running_Time 阅读(261) 评论(0) 推荐(0)
摘要:水 A - Ilya and Diplomas 贪心 || 二分 B - Pasha and Tea 题意:有n个girl和n个boy喝茶,茶杯的容量不等,boy喝的是girl的两倍且boy喝的一样多,girl喝的一样多,问主人最多能倒出多少水 分析:第一反应是用二分搜索girl喝的茶容量,可惜写搓 阅读全文
posted @ 2015-09-03 20:11 Running_Time 阅读(201) 评论(0) 推荐(0)