摘要:
洛谷传送门 CF传送门 解题思路 先考虑没有限制负数的情况,很显然就是用一个栈,每次与栈顶能配对就配对。 当有限制负数时,会出现错误,如 1 1 3 3 -1 -1,此时我们不能让前两个1相配对。 这是进行以下两个改动: 因为要求是正数在负数前面,所以我们进行倒序枚举。 若当前数要求为负数,则直接入 阅读全文
摘要:
洛谷传送门 CF传送门 解题思路 先想O(n^2)暴力,第一层循环为序列a1的最终长度i,第二层循环为序列a3的最终长度j,那么操作次数为原序列a1给a2和a3的数字个数+a2给a1a3的个数+a3给a1a2的个数。 可以预处理出三个数组,cnt1[i]表示序列a1中1……i中有几个数字,cnt2[ 阅读全文
摘要:
洛谷传送门 CF传送门 解题思路 紫题?? 洛谷的题目颜色真的太准! 读完题,我们可以发现以下结论: 栈内元素清空后,剩下的元素从大到小放入答案序列尾部; 比栈顶元素小的元素在栈底则无解 所以思路即为:把给定的元素全部压入栈中,压入栈的过程中同时能弹出就弹出(要符合字典序,即从1开始),然后对剩下的 阅读全文
摘要:
传送门 解题思路 先读懂题目: 有一个等差数列(未排序),共有n个数字,需要你猜出公差和最小的数字。 你共有60次询问机会,每一次有两种选择: ?i,返回ai的值 > i,返回是否存在一个数严格大于i 最后给出答案。 思路? 首先用二分查找得到最大值,使用最多三十次左右询问次数(a<=10^9)。 阅读全文
摘要:
传送门 解题思路 看到题的第一眼,直觉告诉我要把所有的数乘在最大的数身上,但举了一个反例: 2 1 2 2 3 这样乘在2身上明显答案更优。 所以并不能确定应该乘在谁的身上,但是可以保证一定是把所有数都乘在一个数身上。 那么怎么优化O(n^2)的时间复杂度呢? 我们可以预处理一个数组存所有数字二进制 阅读全文
摘要:
传送门 解题思路 开21棵线段树,把数字拆成二进制存,然后对每一位进行操作。 注意+-*/和&^|等不能混用,都各自是闭环,两者毫无规律可言! 所以就开21棵线段树。 AC代码 1 #include<iostream> 2 #include<algorithm> 3 #include<cmath> 阅读全文
摘要:
传送门 莫队 莫队就是一个优雅的暴力。 莫队就是把询问分块+排序,第一关键字为左端点在第几块,第二关键字为区间右端点。 条件?问题离线,询问的是区间。 名字由来?一个国家队队长发明的= 解题思路 对于区间i...j,成功的概率为: 不必解释了(学过排列组合的都懂,像我一样没学过的也想不懂) 整理一下 阅读全文
摘要:
传送门 解题思路 一言一概之,动态求区间众数。 瞄一眼数据范围,大约n根号n——分块大法好! 先把读入的数据离散化,然后进行分块处理。 对于每一个询问,把它分成整块和零散快处理: 整块:预处理i到j块的众数,直接O(1)询问。 零散快:预处理从1到n每个数出现的位置,枚举零散快的数字,二分查找询问的 阅读全文
摘要:
前言 wc真是比某某学堂实惠多了 Day1~Day3 三天快乐的网课时光。 竟然有两个课堂…… 默默地QQ问问xhy有没有录 禁 赛 三 年 警 告 !! Day4 上午继续网课,下去一点半贾老师开车带着我们去济南的山东师范大学。 路上车轮胎出问题了,高速上耽误了一个多小时…… 当然就是多看了一个多 阅读全文
摘要:
传送门 分块大法好 分块 什么是分块 就是把一连串的东西分成几个部分,通常是分成√n个部分,每个部分√n个数字,然后每一块分开处理。(当然有别的情况) 有什么用 时间得到了优化,把n变成了sqrt(n)*log(sqrt(n))。这是一种优雅的暴力呢 主要思路? 每一块内按照权值排序。对于每一次操作 阅读全文
摘要:
传送门 启发式合并 通俗点讲,就是将两个数据合并时,小的合并到大的里,这样就可以节约时间。 解题思路 再看看这个题,就是个板子题。 在两个节点信息合并起来时,让颜色数少的节点合并到颜色点多的节点上,实际操作时则是都是儿子的信息合并到父亲上,但是若儿子信息多于父亲,则交换一下信息(swap可做到O(1 阅读全文
摘要:
传送门 解题思路 先用字典树存储所有的字符串,然后对每个字符串进行判断是否能成为符合要求的字符串: 对于这个字符串的每一位,如果这一位上有别的字符串与之不同,那么一定就把别的字符串这一位上对应的字符j向这个字符串这一位上对应的字符t连一条边,表示我们规定的字母表中j大于t。 然后判断有没有环出现即可 阅读全文
摘要:
传送门 解题思路 普通的trie貌似会MLE 但是我们可以偷偷数组少开个零,就A了 想知道为什么? 别问,问就是数据水。 其实正解map bitset等等…… 看来以后要学学bitset…… AC代码 1 #include<cstdio> 2 #include<iostream> 3 #includ 阅读全文
摘要:
传送门 解题思路 把每一个信息插入01字典树中,用vis[i]表示有多少个信息经过这个点,用vis2[i]表示有多少信息以i这个点结尾。 注意vis中不包含以其结尾的点。 然后对于每一条暗号,跑字典树,经过的点加上vis2[now],结束时加上vis[now],注意当因为匹配不到结束时不能加vis, 阅读全文
摘要:
传送门 解题思路 纯属为了想练trie树 其实map更简单 注意答案开longlong,数组开5*maxn AC代码 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #include<iomanip> 5 #include< 阅读全文