1.括号画家
150. 括号画家 - AcWing题库
牛客竞赛-括号画家
遇到左括号就入栈,右括号需要栈顶的同类左括号对应。
用一个vis数组记录配对合法的下标为1,做完后求最大连续的1即可。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
2.表达式计算4
牛客竞赛-表达式计算4
151. 表达式计算4 - AcWing题库
转换为后缀表达式计算,注意数据中右括号多余的情况,可以在字符串前提前补上左括号。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
python:
将括号补全,直接调用eval()。
s=input().replace('^','**').replace('/','//')
cnt=0
res=s
for i in s:
if i=='(':
cnt+=1
elif i==')':
if cnt:
cnt-=1
else:
res='('+res
while cnt:
res+=')'
cnt-=1
print(eval(res))
3.City Game
152. 城市游戏 - AcWing题库
牛客竞赛-City Game
玉蟾宫 - 洛谷
枚举行作为矩形的底边,预处理出每个点往上连续'F'的高度,问题转化成求直方图中最大矩形问题,单调队列维护第i个位置的高度向两边扩展的最大距离。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
4.双栈排序
153. 双栈排序 - AcWing题库
牛客竞赛-双栈排序
[NOIP2008 提高组] 双栈排序 - 洛谷
双栈排序 题解
hack数据:
5
2 3 1 4 5
要入第一个栈时,要先检查是否会使这个栈不合法,不合法的时候需要先 pop。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
5.Sliding Window
牛客竞赛-Sliding Window
单调队列模板题。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
6.内存分配
155. 内存分配 - AcWing题库
牛客竞赛-内存分配
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
7.Matrix
156. 矩阵 - AcWing题库
牛客竞赛-Matrix
将原矩阵所有的矩形存入哈希表中,询问只需要判断值是否出现。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
牛客oj上空间限制缩小了一半,换用vector可以过。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
8.Subway tree systems
牛客竞赛-Subway tree systems
157. 树形地铁系统 - AcWing题库
给定的序列是树的dfs序列,0表示递归下一层,1表示回溯到上一层。根据序列可以确定一个树,问题就转化为判断两个树是否同构即可。
两个树同构,dfs序列中子树序列顺序会不同,但是子树是对应相等的,把子树按照字典序排序得到的结果,同构的情况一定是相同的。(树的最小表示定义,可以用来判断同构树)。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
9.Necklace
牛客竞赛-Necklace
158. 项链 - AcWing题库
将第一个串的所有同构串的哈希值算出来,计算第二个串的哈希值,看是否存在相等的。
如果存在,求最小字串:在比较两个字串时二分出最长前缀的长度,找到不同的后一位。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
10.Milking Grid
牛客竞赛-Milking Grid
159. 奶牛矩阵 - AcWing题库
直接枚举覆盖矩阵的列的大小C,满足对于所有行字符C都是它们的一个循环节。对于C求覆盖矩阵的R,相当于把每一行看作一个整体,用kmp求出最短循环节,求ne数组比较时改为字符串比较,值为n-ne[n]。
最后答案是满足条件最小的C和它对应求出的R。如果C更大会使比较时更不容易相等,ne数组变小,R值更大。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
11.匹配统计
牛客竞赛-匹配统计
160. 匹配统计 - AcWing题库
先预处理出a串哈希值,对于每一个后缀用二分法求出与b匹配的最大长度。把长度个数记录下来,后面查询复杂度都是O(1)。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
12.Phone List
牛客竞赛-Phone List
161. 电话列表 - AcWing题库
用trie树维护单词列表,一个单词结束用st数组记录。如果有前缀在插入的时候有两种情况:1.如果插入的是已经插入的前缀,则插入到末尾一定有tr[p][ch]不为0。2.如果插入的过程中某个已插入的是他的前缀,中途判断st[p]为1.
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
13.Black Box
牛客竞赛-Black Box
162. 黑盒子 - AcWing题库
堆可以用stl中的multiset代替模拟,指针指向下次查询的排位。如果插入的值比指针指向的值小,将指针前移。这样每次查询就是指针所指向的值。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
上面代码并不完全正确,但是因为牛客数据比较水可以过。 有一种特殊情况是下一次的GET超过当前长度,此时迭代器会指向end,为了避免需要加上哨兵。
下面代码可以通过洛谷所有数据:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
14.生日礼物
牛客竞赛-生日礼物
163. 生日礼物 - AcWing题库
将连续的正数,负数作为连续的一段一起选,整个数组就被划分为了一段正数一段负数相间的序列。如果正数段的个数小于等于m,直接选所有的正数段。否则考虑减小一些正数段,并且要使得减少的值尽量的小。
减少一段可以删除一个正数段,减少的代价就是这个正数段的值;或者将两个正数间的负数一起选上,减少的待见就是负数段的绝对值,现在要使得代价最小,将负数段取绝对值,就相当于是选取cnt-m个不连续的(cnt为正数段的个数)段,使得和最小。这个问题和本书85页例题的问题是一样的:现将段插入小根堆中,并且段之间关系用双链表维护,每次取出堆顶并于两侧合并(减去两边的值)插入堆中。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include