随笔分类 -  思维

摘要:题意略。 思路:本题有两个关键点: 一、满足题设的区间条件 1.区间内1的个数和为偶数 2.区间内含1个数最多的那一项,它所含1的个数不得超过区间内1的个数和的一半。 二、长度超过60的区间必然满足上一项的条件2 详见代码: 阅读全文
posted @ 2018-11-25 10:38 温和的提比略 阅读(356) 评论(0) 推荐(0)
摘要:题意略。 思路: 这个题目没做出来是因为缺少一个整体的构造思路。 正确的构造思路是不断地在s中去构造并且扩大t的后缀,构造好的后缀总是放在前面,然后不断地把它往后挤,最后将s构造成t。 比如: 现在在s中构造好的t的后缀为a(在s中体现为前缀),包含在了s的前缀中,为了继续扩大这个t的后缀,我们需要 阅读全文
posted @ 2018-08-07 20:56 温和的提比略 阅读(134) 评论(0) 推荐(0)
摘要:题意略。 思路: 我们可以把 bi[ i ] 在 ai[ ] 中的位置记录下来,然后算出 i - mp[ bi[i] ] ,再将它压入一个multiset。每次我们就二分地来寻找离0最近的数字来作为答案。 那当我们循环左移的时候怎么办呢?把每个数字都减一,把当前 bi[i] 产生的数字重新赋值再压入 阅读全文
posted @ 2018-08-04 09:03 温和的提比略 阅读(146) 评论(0) 推荐(0)
摘要:题意略。 思路: 我们将数组中的数字从大到小排列,分别考虑取前0 + 1,1 + 1,2 + 1.....个的情况。 所谓i + 1的意思是,取前i个的时候,同时取第[i + 1],[i + 2],......,[n]个元素。这样产生的是一个递减的和。 我们将取前 i 个的这种情况定义为第 i 类。 阅读全文
posted @ 2018-08-02 15:16 温和的提比略 阅读(195) 评论(0) 推荐(0)
摘要:题意略。 思路: 其实我们没有必要关注每个数字的位置,我们只要把大的数字放在小的数字上就可以了,这样它的位置必然会发生变换。 在变换时,这个替换的序列越长越好,每个序列对答案的贡献就是该序列的长度 - 1。 我们可以把这个题抽象为一个柱形图,每个柱子的下标为某个数字,且从左向右下标数字减小,该柱子的 阅读全文
posted @ 2018-07-24 21:05 温和的提比略 阅读(122) 评论(0) 推荐(0)
摘要:题意略。 思路: 我们先把所有字符串处理成 ")))((((" 这样的形式。然后我们把这些字符串排个序,按照min(l,r)来排,小的在前,在我的代码中,l为 ( 的个数,r 为 ) 的个数。 然后我们从头到尾扫,l > r的,我们把它放在左边;l < r的,我们把它放在右边。这样排的原因是,我希望 阅读全文
posted @ 2018-07-24 20:52 温和的提比略 阅读(190) 评论(0) 推荐(0)
摘要:题意略。 思路: 从中间开始向两边搜索,寻求第一个比当前元素大/小的元素的位置,可用单调栈来维护。 阅读全文
posted @ 2018-07-22 16:12 温和的提比略 阅读(101) 评论(0) 推荐(0)
摘要:题意略。 思路: 我们应该着重关注负数对当前数列的影响,由于前缀和的性质,我们都是从当前数字向前加,这其实也是在枚举以哪个下标作为开头。 详见代码: 阅读全文
posted @ 2018-07-20 20:01 温和的提比略 阅读(124) 评论(0) 推荐(0)
摘要:题意:给你两个等长的数列,让你在两个数列中各选择一个数字,使得这两个数的gcd是这n * n种组合中最大的。 思路:如果上来就考虑分解因式什么的,就想偏了,假设数列1的最大数为max1,数列2的最大数为max2,我们知道,这个max_gcd一定是在 1~max(max1,max2)中间的。我们一 一 阅读全文
posted @ 2018-07-14 21:14 温和的提比略 阅读(130) 评论(0) 推荐(0)
摘要:题意略。 思路: 本题实质上就是在问一共有多少种合理的匹配,使得括号匹配合法。我给每种情况编号,用一个cnt来记录,( 则cnt += 1;) 出现则cnt -= 1。 最后只要把相反数的个数相乘后相加就可以得到最后的结果。但是要注意,像 )( 这样的串是没有意义的, 因为不可能有别的串来匹配它来使 阅读全文
posted @ 2018-07-12 20:53 温和的提比略 阅读(156) 评论(0) 推荐(0)
摘要:题意略。 思路: 由于xi的选取是任意的,所以我们不用去理会题目中的xi数列条件。主要是把关注点放在长度为L的线段覆盖至少k个整数这个条件上。 像这种取到最小的合法解的问题,我们应该要想到使用二分法来试探。 那么在验证时,如果我们要验证下标为i的的这个项是否能被一个包含k个元素的区间覆盖,就要枚举这 阅读全文
posted @ 2018-07-12 19:43 温和的提比略 阅读(163) 评论(0) 推荐(0)
摘要:题意略。 思路:为了更好地求出一段连续数字的异或和,我们可以用前缀异或和来维护,现在我们只需要考虑每一个在数组中的数字向前异或,且在指定范围内, 异或值为全1的个数有多少个。算出每一个位子能做出的贡献,最后相加就可以了。 比如说现在的前缀xorsum = 1010,我们只需要知道在当前位置之前有多少 阅读全文
posted @ 2018-07-12 10:07 温和的提比略 阅读(103) 评论(0) 推荐(0)
摘要:题意略。 思路: 尺取法,依然是要利用之前的结果。 感觉时间复杂度太高了,竟然也过了。 阅读全文
posted @ 2018-07-10 10:47 温和的提比略 阅读(121) 评论(0) 推荐(0)
摘要:题意略。 思路: 第一问: 递归地来写,找对称,发现关于(1<<y) - 1和(1<<y)对称的数字做 & 结果为0。 第二问: 6,7特殊考虑。循环左移(1<<y) ~ (1<<(y + 1) - 1),可以保证这个区间内的值与下标做 & 结果不为0。然而如果在这个段内只有1<<y这一个数,那么 阅读全文
posted @ 2018-07-04 08:58 温和的提比略 阅读(124) 评论(0) 推荐(0)
摘要:题意略。 思路: 将字符分桶,然后暴力去扫,扫完合并。假设有k个桶,每个桶里有n / k个数,那么我们应该要扫 n / (2 * k)次,每次的复杂度是k,最后算得复杂度是O(n)。 详见代码: 阅读全文
posted @ 2018-07-03 11:07 温和的提比略 阅读(139) 评论(0) 推荐(0)
摘要:题意略。 思路: 可以看成是所有的云彩照常运动,而月亮在跑。只要两个云彩相交后,在分离前月亮能赶到,就算是符合题意的。 可以知道,两个相隔越远的相向运动地云彩是越有可能符合题意的,因为它们相遇所用时间更长,这样月亮越有可能赶到。 假设云彩1为(l1,r1) ,云彩2为(l2,r2) ,r1 < l2 阅读全文
posted @ 2018-07-02 18:00 温和的提比略 阅读(177) 评论(0) 推荐(0)
摘要:题意略。 思路:如图 详见代码: 阅读全文
posted @ 2018-07-02 17:40 温和的提比略 阅读(140) 评论(0) 推荐(0)
摘要:题意略。 思路:这题考察的是二分搜索。 阅读全文
posted @ 2018-06-09 09:08 温和的提比略 阅读(130) 评论(0) 推荐(0)
摘要:题意略。 思路:构造题。 我们把全部的d[n]+1个点分作3部分来构造。 首先我们把原问题归约成构造d1、dn、和{d2 - d1,d3 - d1,.....,d[n-1] - d1}这样的问题,其中第三部分的构造相当于是原问题的子问题。 1.由本部向P2中每一个点都连接一条边,这样可以补上第三部分 阅读全文
posted @ 2018-05-18 11:52 温和的提比略 阅读(179) 评论(0) 推荐(0)
摘要:题意略。 思路:题目就是在询问你m次,第k小是哪个数。首先我们可以想到直接排序后,即可O(1)来查找询问。但是题目中n的范围给的是1e7, 无法承受nlogn的复杂度。从而想到另外一种求静态第k小的方法:利用快速排序来做到。时间复杂度是O(n),但是询问次数m是100, 同样无法承受O(n * m) 阅读全文
posted @ 2018-03-24 09:34 温和的提比略 阅读(135) 评论(0) 推荐(0)