09 2017 档案

摘要:题意 : 给出一颗无向边构成的树,每一条边都有一个边权,叫你选出一条路,使得此路所有的边的异或值最大。 分析 : 暴力是不可能暴力的,这辈子不可能暴力,那么来冷静分析一下如何去做。假设现在答案的异或值的最大的路的起点和终点分别为 a、b,这个异或值为了方便我用 ⊕(a, b) 表示,那么接下来有一个 阅读全文
posted @ 2017-09-30 11:01 qwerity 阅读(169) 评论(0) 推荐(0) 编辑
摘要:题意 : 度熊手上有一本神奇的字典,你可以在它里面做如下三个操作:1、insert : 往神奇字典中插入一个单词2、delete: 在神奇字典中删除所有前缀等于给定字符串的单词3、search: 查询是否在神奇字典中有一个字符串的前缀等于给定的字符串 分析 : 利用字典树,插入操作时对于每一个节点的 阅读全文
posted @ 2017-09-30 10:29 qwerity 阅读(204) 评论(0) 推荐(0) 编辑
摘要:模板 : const int Bit = 32; struct Trie { Trie *ch[2]; LL v; inline void init(){ for(int i=0; i<2; i++) this->ch[i] = NULL; this->v = -1; } }; Trie *root 阅读全文
posted @ 2017-09-29 15:23 qwerity 阅读(448) 评论(0) 推荐(0) 编辑
摘要:题意 : 给你 w 个单词以及他们的频率,现在给出模拟 9 键打字的一串数字,要你在其模拟打字的过程中给出不同长度的提示词,出现的提示词应当是之前频率最高的,当然提示词不需要完整的,也可以是 w 个单词出现最多次数的前缀。 分析 : 利用字典树存储这 w 个单词,然后给每一个结点的权值赋上其单词出现 阅读全文
posted @ 2017-09-28 21:50 qwerity 阅读(174) 评论(0) 推荐(0) 编辑
摘要:模板 : #include<string.h> #include<stdio.h> #include<malloc.h> #include<iostream> #include<algorithm> using namespace std; const int maxn = 26; struct T 阅读全文
posted @ 2017-09-27 23:24 qwerity 阅读(298) 评论(0) 推荐(0) 编辑
摘要:题意 : 现有一字符串S,要求在S中找到最长的子串E,使得S满足格式“EAEBE”,其中A,B可以为任意的S子串。也就是说子串E既是S的前缀也是S的后缀,同时还在S中间出现,但不与前缀E与后缀E重叠。 分析 : 使用KMP的Next数组的特点,我们能够找出字符串所有相同的前后缀,即递推 Next[ 阅读全文
posted @ 2017-09-26 20:44 qwerity 阅读(154) 评论(0) 推荐(0) 编辑
摘要:题意 : 给个字符串S,要把S分成两段T1,T2,每个字母都有一个对应的价值,如果T1,T2是回文串,那么他们就会有一个价值,这个价值是这个串的所有字母价值之和,如果不是回文串,那么这串价值就为0。问最多能获得多少价值? 分析 : 有两种做法,第一种是拓展KMP正反跑两次或者Manacher ①如果 阅读全文
posted @ 2017-09-26 19:45 qwerity 阅读(149) 评论(0) 推荐(0) 编辑
摘要:模板 int getMin(char *s) { int i = 0, j = 1, l; int len = strlen(s); while(i < len && j < len) { for(l = 0; l < len; l++) if(s[(i + l) % len] != s[(j + 阅读全文
posted @ 2017-09-26 18:50 qwerity 阅读(707) 评论(0) 推荐(0) 编辑
摘要:模板 #include<stdio.h> #include<string.h> #include<algorithm> #include<map> using namespace std; const int maxn = 2e5 + 10; char s[maxn], sNew[maxn<<1]; 阅读全文
posted @ 2017-09-26 18:21 qwerity 阅读(214) 评论(0) 推荐(0) 编辑
摘要:题意 : 乱七八糟说了一大堆,实际上就是问你从一个序列到另个序列最少经过多少步的变化,每一次变化只能取序列的任意一个元素去和首元素互换 分析 : 由于只能和第一个元素去互换这种操作,所以没啥最优的特别方法,只要乖乖模拟即可,如果第一个元素不在正确位置则将它和正确位置的元素交换使其回到正确位置,如果第 阅读全文
posted @ 2017-09-24 19:17 qwerity 阅读(194) 评论(0) 推荐(0) 编辑
摘要://截取字符串 ch 的 st~en 这一段子串返回子串的首地址 //注意用完需要根据需要最后free()掉 char* substring(char* ch,int st,int en) { int length = en - st + 1; char* pch=ch; char* subch=( 阅读全文
posted @ 2017-09-23 20:03 qwerity 阅读(159) 评论(0) 推荐(0) 编辑
摘要:题意 : 给出两个字符串,现在需要求一个和sum,考虑第二个字符串的所有后缀,每个后缀对于这个sum的贡献是这个后缀在第一个字符串出现的次数*后缀的长度,最后输出的答案应当是 sum % 1e9+7 分析 : 有两种做法,如果会拓展KMP的话可以说这就是一道模板题了,拓展KMP专门就是找最长公共前缀 阅读全文
posted @ 2017-09-22 21:48 qwerity 阅读(163) 评论(0) 推荐(0) 编辑
摘要:题意 : 一个字符串的前缀是指包含该字符第一个字母的连续子串,例如:abcd的所有前缀为a, ab, abc, abcd。给出一个字符串S,求其所有前缀中,字符长度与出现次数的乘积的最大值。例如:S = "abababa" 所有的前缀如下: "a", 长度与出现次数的乘积 1 * 4 = 4, "a 阅读全文
posted @ 2017-09-22 21:06 qwerity 阅读(256) 评论(0) 推荐(0) 编辑
摘要:题意 : 给你一个包含26个小写字母的明文密文转换信息字符串str,第一个表示'a'对应的密文是str[0]、'b'对应str[1]……以此类推。接下来一行给你一个另一个字符串,这个字符串由密文+明文组成,但是现在后面部分的明问可能有不完整的情况(也有可能缺失只包含密文),问你现在最少需要补充多多少 阅读全文
posted @ 2017-09-22 19:41 qwerity 阅读(152) 评论(0) 推荐(0) 编辑
摘要:废话不多说,上模板 #include<bits/stdc++.h> const int maxn = 1e6 + 10; int Next[maxn], extend[maxn], moL, strL;///Next数组、extend数组、模式串长度、母串长度 char mo[maxn], S[ma 阅读全文
posted @ 2017-09-22 16:02 qwerity 阅读(155) 评论(0) 推荐(0) 编辑
摘要:经典问题 : 给出一个由某个循环节构成的字符串,要你找出最小的循环节,例如 abababab 最小循环节当是 ab ,而类似 abab 也可以成为它的循环节,但并非最短。 分析 : 对于上述问题有两个结论 如果对于next数组中的 i, 符合 i % ( i - next[i] ) == 0 && 阅读全文
posted @ 2017-09-20 21:56 qwerity 阅读(2396) 评论(0) 推荐(0) 编辑
摘要:题意 : 给出四个点,问你第四个点是否在前三个点构成的圆内,若在圆外输出"Accepted",否则输出"Rejected",题目保证前三个点不在一条直线上。 分析 : 简单的计算几何问题,如果能够知道圆心和半径(Radius)以及第四个点和圆心的距离(Distance),我们就能够判断第四个点是否在 阅读全文
posted @ 2017-09-17 23:10 qwerity 阅读(670) 评论(0) 推荐(0) 编辑
摘要:inline bool scan_d(int &num) { char in;bool IsN=false; in=getchar(); if(in==EOF) return false; while(in!='-'&&(in'9')) in=getchar(); if(in=='-'){ IsN=true;num=... 阅读全文
posted @ 2017-09-13 20:06 qwerity 阅读(161) 评论(0) 推荐(0) 编辑
摘要:题意 : 给定两个序列 a 和 b ,保证 a 数列的和 == b数列的和,从头到尾考虑 (a[i] - b[i]) 的前缀和,直到前缀和为负数则无法进行下去,所得的便是a[1~i]的和,现在有一个操作,就是你可以将最前面的a[1] && b[1] 这两个数放到末尾去,问你最少经过多少次这样的操作能 阅读全文
posted @ 2017-09-13 17:36 qwerity 阅读(120) 评论(0) 推荐(0) 编辑
摘要:问题描述 : 在一个给定的无序序列当中找出最长且递增的子序列 (不一定连续) 对于这个经典问题通常有两种时间复杂度不一样方法来解决一个是O(n2)的算法 另外一个是采用了二分或树状数组O(nlogn)的算法。 动态规划 O(n2) 算法 : 对于序列 squ[1]、squ[2]……squ[n] 分别 阅读全文
posted @ 2017-09-13 17:05 qwerity 阅读(459) 评论(0) 推荐(0) 编辑
摘要:链接 : http://codeforces.com/contest/854/problem/C 题意 : 有 n 架飞机需要分别在 1~n 秒后起飞,允许起飞的时间是从 k 秒后开始,给出每一架飞机拖延一秒的花费c[1]~c[n],问你如何安排飞机的起飞次序能够使得花费最小? 分析 : 需要安排的 阅读全文
posted @ 2017-09-07 22:14 qwerity 阅读(115) 评论(0) 推荐(0) 编辑
摘要:题意 : 给出 n = 2k个参赛者,要求每一个参赛者必须与其他 n-1 个选手各赛一次,每个选手一天只能赛一次,循环赛一共进行 n-1 天, 按照此要求设计一张比赛日程表, 使得该表有 n 行和 n-1 列,第 i 行 j 列为第 i 个选手第 j 天遇到的选手。 分析 : 刘大爷给出了一个分治的 阅读全文
posted @ 2017-09-06 23:14 qwerity 阅读(340) 评论(0) 推荐(0) 编辑
摘要:链接 : http://codeforces.com/contest/849/problem/B 题意 : 给出 n 个在直角坐标系上的点,每个点的横坐标的值对应给出的顺序序数,比如 1 2 4 3 则相当于给出了(1,1)、(2,2)、(3,4)、(4,3)这四个点,现在问你能不能找出两条不重叠的 阅读全文
posted @ 2017-09-02 12:32 qwerity 阅读(166) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示