报名打的为数不多的 PR,但是赛时经历及其惨痛( T3 是通信所以没想去尝试,T1 想了 1h 大概知道是个乱搞但实在没有章法,T2 纯属降智了。 【PR #6】DNA 匹配 这个浮点答案的 checker 实现方式,以及 \(m\leq 40\) 的数据范围,很难不察觉这是一道偏乱搞题。 我的想法是 shuffle 之后强行截取
【题解】P3147 [USACO16OPEN]262144 P 虽然是道绿题,但我还是挂/卡了很久,是道好题,写篇题解记录一下。 题目链接 P3147 [USACO16OPEN]262144 P - 洛谷 P3146 [USACO16OPEN]248 G - 洛谷 下面这道题是上面的弱化版,只是数据范围不同,但有一种解法只能通过 P3147,所以这里都以 P3147 为
引用链接 :https://pandas.pydata.org/pandas-docs/version/0.23.4/generated/pandas.cut.html 用途 pandas.cut用来把一组数据分割成离散的区间。比如有一组年龄数据,可以使用pandas.cut将年龄数据分割成不同的年龄段并打上标签。 原型 pandas.cut(x, bins, right=True, labels=No
随机选了四道 2100~2400 的题,做出来了前三道。 A - CF1399E2 因为每次操作一定会有一个 \(w_i\) 减半,所以至多进行 \(n\log V\) 次操作。对于每个操作,我们都可以算出它的收益。因为操作的代价只可能是 \(1\) 或 \(2\),将操作按照收益排序后,枚举选多少个代价为 \(2\) 的操作,然后双指
一·懒惰标记的重要性 线段树中,修改一段区间之内的值,是将其分成更小的区间与树中区间匹配,若无法匹配,则再分成更小的区间进行匹配。基于此,我们并不需要更改整棵树,只需要更改其中的一部分,更新掉的区间的子区间也不必更新,只要用懒标记标记即可,防止之后的查询错误。这样,时间复杂度
枚举区间中点$x$,考虑$L$使得$x$为区间$[x-L,x+L]$的众数: 记可重集$\{|i-x|\mid a_{i}=x\}$中的元素依次为$b_{1}\le b_{2}\le ...\le b_{k}$ 枚举出现次数$i\in [1,k]$,即要求$L\in [b_{i},b_{i+1})$,且合法的$L$是该区间的一个前缀 当$k\ge \sqrt{n}$时,这类$x$仅有$o(\sqrt{n})$个,
LeetCode 435. Non-overlapping Intervals (无重叠区间) 题目 链接 https://leetcode.cn/problems/non-overlapping-intervals/ 问题描述 给定一个区间的集合 intervals ,其中 intervals[i] = [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。 示例 输入: i
给定一个整数 n 和一个 无重复 黑名单整数数组 blacklist 。设计一种算法,从 [0, n - 1] 范围内的任意整数中选取一个 未加入 黑名单 blacklist 的整数。 任何在上述范围内且不在黑名单 blacklist 中的整数都应该有同等的可能性被返回。 1. 拒绝采样(超时) 一直生成指定范围
22-06-24 NOIO2020 #2 游戏 好久没搞 OI 真的蠢了。 恰好立刻转至少,所以设 \(f(x)\) 为钦定 \(x\) 对非平局回合的情况,\(g(x)\) 为恰好 \(x\) 对非平局回合的情况。那么: \[f(x)=\sum^m_{i=x}\binom i n g(i) \]应用二项式反演有: \[g(x)=\sum^m_{i=x}(-1)^{i-x}\binom i n f(i) \]
差分 一、介绍 差分数组就是原始数组相邻元素差构成的数组。其定义为: \[b_i =\begin{cases} a_i-a_{i-1}, & i\in[2,n]\\ a_i, & i=1 \end{cases} \]主要的性质有: \(a_i\) 的值是 \(b_i\) 的前缀和,即 \(a_n = \sum_{i=1}^n{b_i}\) 计算 \(a_i\) 的前缀和 \(sum = \sum_{i=1
排序 一、快排(分治) 1.确定分界点 q[l] q[r] q[(l+r)/2] 随机 2.调整区间:根据确定的点,假设为x,使得左边的区间<=x,右边的区间的数>=x 比较暴力的方法: a[ ] b[ ] q[l~r] q[i]<=x放到a[ ] ,q[i]>=x 放到b[ ] 再先把a[ ]放到q[ ],
有的时候会用到前缀和统计,比如[SCOI2007]组队我所学习的写法用到了差分的统计方法,但问题是有可能找出来的左右端点的大小关系反了,这时候直接上差分数组就会出现区间减的效果,而事实上我们希望的是忽略这个不合法的区间,所以说我们应该加一个特判来防止错误的发生,对于这道题来说就是
总结 偏序问题 1D 动态规划优化 动态问题转为静态问题 \(\quad\)所有的这些都离不开一个精髓,就是分治处理:先处理左边区间,然后处理左边区间对右边区间的贡献,然后处理右边区间。(后面两项处理根据具体应用调整操作顺序) \(\quad\)对于偏序问题一般的就是三维偏序,要注意的是一边算贡
方法一:求最长公共子序列 把原字符串逆序,再和原字符串求最长公共子序列,得到的长度就是最长回文串长度 以填表的形式就很好理解最长公共子序列的求解方法 现在假设有两个序列 A={3,5,7,4,8,6,7,8,2,} 和 B={1,3,4,5,6,7,7} 对于 B 中的每一个元素,和A中的每
最近打模拟赛遇到的,不得不说非常神仙。 又难打又难调,写篇题解纪念一下。 题目链接:P5044。 Subtask2 我们先来看这个部分分。 这是一个比较显然的区间dp。(虽然我在模拟赛时并没有看出来) 设 $ dp_{l,r} $ 为区间 $ [l,r] $ 的最优解, $ p $ 为这个区间内任何一个最大值的位置。 当 $
NC20860 兔子的区间密码 题目 题目描述 有一只可爱的兔子被困在了密室了,密室里有两个数字,还有一行字: 只有解开密码,才能够出去。 可爱的兔子摸索了好久,发现密室里的两个数字是表示的是一个区间 \([L,R]\) 而密码是这个区间中任意选择两个(可以相同的)整数后异或的最大值。 比如给了
1. 静态区间合并 先按左边界排序,再两两比较合并 class Solution { public: vector<vector<int>> merge(vector<vector<int>>& intervals) { if (intervals.size() == 0) return {}; sort(intervals.begin(), intervals.end());//按左边界排序
一、题目 点此看题 二、解法 首先考虑只有一个港口的情况,发现合法的充要条件是所有 \([a,b]\) 不交。 由于两个港口是独立的,所以问题转化成:求出有多少种二染色方案,使得同色的线段不交。我们把满足 \(a<c<b<d\) 的线段 \([a,b]\) 和 \([c,d]\) 之间连一条边,然后问题就变成了求连通
描述 给出一组区间,请合并所有重叠的区间。 请保证合并后的区间按区间起点升序排列。 数据范围:区间组数0≤n≤2×105 ,区间内 的值都满足 0 ≤val≤2×105 要求:空间复杂度 O(n),时间复杂度 O(nlogn) 进阶:空间复杂度 O(val),时间复杂度O(val) 解题思路和代码 from functools import cmp
集合 1 基本概念 1.1 定义 把一些确定的对象看成一个整体就形成了一个集合,集合一般用大写字母A B C ……表示 1.2 元素 集合中的每个对象叫做这个集合的元素,一般用a b c ……表示 (确定性,互异性,无序性) 1.3 元素和集合的关系 若 \(a\) 是集合 \(A\) 中的元素,记作 \(a \in A\)
986. 区间列表的交集 给定两个由一些 闭区间 组成的列表,firstList 和 secondList ,其中 firstList[i] = [starti, endi] 而 secondList[j] = [startj, endj] 。每个区间列表都是成对 不相交 的,并且 已经排序 。 返回这 两个区间列表的交集 。 形式上,闭区间 [a,
目录【变形背包DP】LGP2340 [USACO03FALL]Cow Exhibition G【区间dp】【破环成链】[NOI1995]石子合并【区间dp】LGP3146 [USACO16OPEN]248 G【区间dp】【破环成链】LGP1063 [NOIP2006 提高组] 能量项链【破环成链】【区间dp】LGP4342 [IOI1998]Polygon【斜率优化】BZOJ3437 小P的
需求: UGUI做的弹幕功能,弹幕从一侧飞入,从另一侧飞出。飞入伴随着淡入效果,飞出伴随淡出效果。 探索得出的结论: 1、Canvas中的各元素的网格顶点在Canvas合批绘制时被统一变换到Canvas的局部坐标系中。 2、淡入淡出是通过计算某个显示位置与渐变区间的关系,计算透明度。从第一条可知渐
分治法\(O(n\log{n})\) 按照“分而治之”的思想,将整个数据区间从中间一分为二,这样我们就将求整个区间的最大子列和转换为求小区间的最大子列和。 设区间左端为left,区间右端为right,区间中间为middle。 思考一下,求小区间的子列和一共存在一下三种情况: 求左区间的最大子列和:[left, m
1,对比 https://blog.csdn.net/honghuidan/article/details/77527808 两者相同点:单点/区间修改,区间查询 区间查询:前缀和 区间修改,单点查询:差分 单点修改,区间查询:树状数组,线段树 区间修改,区间查询:线段树+懒标记 不同点: 树状数组只能维护前缀操作和(前缀和,前缀积,前缀最大最小),而