zoukankan      html  css  js  c++  java
  • 其他-私人♂收藏(比赛记录 Mar, 2019)

    OwO

    03.03 [USACO19JAN]

    A. Redistricting

    题意:给 (g) ,求 (f(n))(f(i)=f(j)+[g(i)ge g(j)],j in (i-k,i])

    离散化之后线段树优化 DP ;或者发现额外贡献最多只有 (+1) ,单调队列。

    B. Exercise Route

    题意:给一棵树和一些路径,求有边交的路径的对数。

    把与 LCA 关联的点都 (+1) ,查询除 LCA 外路径上的点。这样除了两条路径 LCA 相同的情况外是没有问题的。相同的时候开 map 暴力统计答案,也可以科学一点,最后把每个点作为 LCA 对应的一堆二元组排序再统计答案。

    C. Rain Tracking 2

    题意:给 (k) ,以及 (c_i=min{a_{i},a_{i+1},cdots, a_{i+k-1}}) ,求合法 (a) 序列数量。

    连续 (i) 个相等的 (c) ,设 (x=10^9-c) ,方案数是 (f(i)=sum_{j=1}^{k}x^{j-1}f(i-j)) ,扰动一下得到 (f(l+1)=(x+1)f(l)-x^kf(l-k)​)

    相邻的 (c_x>c_i) 时,发现可以确定 (c_i) 对应区间一个 (a) 的值,并且另外 (k-1) 个位置要满足的限制是 (ge c_x) 。当前讨论的是 (c_i) 的贡献,所以长度 (l) 应该减去 (k) ,然后再统计答案。

    多个部分的答案乘起来就是最终答案。

    03.14 [FJOI2018]

    所罗门王的宝藏

    限制如 (a_i+b_i=c_k) ,线性关系相加减还是线性关系,连边之后任意给一个未知数一个值, DFS 判断是否矛盾。

    领导集团问题

    % Newuser 大佬神仙贪心。

    按第一关键字权值降序,第二关键字深度降序排序。讨论点 (p) ,在到根路径上如果有点被标记,把最近的点取消标记, (ans) 不变;如果没有, (ans+1) 。然后标记自己。之后树剖。

    我想的是 DP , (f(i,j)) 表示 (i) 为根子树内选择的点最小权值恰好为 (j) 的最大可选点数。

    [f(i,j)=sum max_{son,k ge j}{f(son,k)}+[A(i)=j] ]

    想把第二维合在一起用线段,使得真正维护的元素的后缀和,等于 (f) 的后缀最大值。

    叶节点的信息显然就是 (A(i)) 位置是 (1) ,其余是 (0) 的线段。

    可以发现如果忽略 ([A(i)=j]) ,直接把儿子合并(每一位置对应相加),就能得到当前节点的信息。

    然后把 (A(i)) 位置 (+1) ,前驱 (-1) ,就可以得到完整的信息了。有点差分的意思吧,可以发现这样的确得到了正确的信息。

    等等,前驱 (-1) ,取消标记,那这本质就是前面的神仙贪心?

    代码特别好写, dsu +multi_set 可以 49 行写完。

    邮递员问题

    (S,T) 均两条线段两端时,画图运用三角不等式可以发现最优路径必不存在交叉的情况。

    然后我就不明白了 QAQ 。咕咕咕。

    Orz

    10 + 0 +0 分,爆零预订。

    A 题以为不用图论直接判标记,确定值就行。这样不对,线性关系必须依次推,不能把两堆东西合并之后判是否合法。这样的话合法的情况也很有可能被判为非法。

    B 题嘛……脑子有点乱,写错了迭代器。暴力被我误删了,太智障了。

    C 题想到了 (S,T) 在两端的结论,其他情况想枚举分割线,因为情况太多所以随机枚举一部分,然后两边用 DP 求解。可行但不一定最优,感觉很不正确,感觉收益率不大,弃了。

    好惨啊 Orz 。

    03.22 [来自浙江的不可告人的比赛]

    A 容斥还是常见套路的,然而我认定了不能从新图推旧图,在求旧图上耗死了; B 题有点神仙,以为网络流或者图论,结果是生成树 + 图论; C 题需要考虑组合意义,没听明白,咕咕咕。

    3.24 [51nod 2019 省选第二场]

    A. 抽卡大赛

    枚举每个人,每张卡的 (a)(a_0) ,然后 DP , (f(i,j)) 表示前 (i) 个人抽卡后恰好 (j) 张卡满足 (a_i>a_0) ,然后算下贡献,加上去。整体 (O(n^4))

    (t_i=f(n,i)) 的 OGF 为 (T(x)) ,有 (T(x)= prod (p_i x + 1 - p_i)) ,其中 (p_i) 是某个人抽卡 (a_i>a_0) 的概率,实际上是某人若干张卡片 (p) 值的和。

    将所有人的所有卡片按 (a) 值排序,然后从大到小讨论。每次移动对 (T) 的影响仅仅是某个 (p_i) 增加了一个值,除以旧的,乘上新的。一次除法操作是 (O(n)) 的,因为有每次除的都是以前乘过的东西这个性质。乘法也是。

    所以整体 (O(n^3)) ,据说多加 (log) 会挂。

    B. 异或约数和

    整除分块,需要求异或前缀和。打表可得它的循环节是 4 。

    C. 小朋友的笑话

    对于每个笑话,以人为下标建立线段树。同时维护笑话和答案的线段树。

    势能分析,对于笑话线段树,其实是在不停涂黑色,涂色区间原来是纯色区间时才可以结束。注意黑色区间是会合并的,并不会拖延之后的操作多次,整体就 (O(n log n)) 了。

    也可以用 set, map 之类的维护区间的并?差不多吧。

    03.25 [USACO18DEC]

    A.

    设答案是 (g(x)) 有:

    [g(x)=max{f(x),dfrac{g(x-1)+g(x+1)}{2}} ag{1} ]

    注意 (c=max(a,b)) 等价于 (a ge c, b ge c) 同时成立,且至少一个取等。

    ((1)) 式第二项限制使得:

    [g(x)-g(x-1) ge g(x+1)-g(x) ]

    对点集 ({(x,g(x))}) ,在 (x) 单增时,增量 (h(x)=g(x)-g(x-1) ge h(x+1)) ,所以这个点集是一个上凸包。

    ({(x,f(x))}) 建上凸包,如果点在凸包上,那就取 (g(x)=f(x)) 了;如果不在,增量 (h) 需要取等,就让斜率取等,取 (x) 在凸包上对应的值。实际上就是把点都取到凸包上。

    B.

    问题转化,一个元素的移动并不影响其他元素的相对位置。最终集合单增,因此选取的集合的补集单增。为了最小化最终集合大小,应该最大化补集大小,即求补集的 LIS 。原集第 (k) 小,因此求补集第 (k) 大 LIS 。

    然后每个点维护二元组 ((len,f)) ,表示以它作为开始的 LIS 长度和对应方案数, (O(n log n)) DP 一下。

    然后长度从大到小枚举,注意相同长度的 LIS 对应的开始位置的元素的值,从左到右单调递减。由于求第 (k) 大,所以尽量先考虑大的,从左往右考虑。然后类似权值线段树查第 (k) 大那样的贪心,取一下就可以了。
    注意每个长度取到元素了就 break 掉,并标记不要再讨论左边的元素,然后枚举长度 (-1) 。算方案数的过程中和 (10^18)(min) (因为这个方案数随便构造一下,上界至少可以到 ((^n_{n/2})) )。

    C.

    贪心,合法删除过程中一直只有一个连通块。每个先删 (a) 才能删 (b) 的限制连边 (a ightarrow b) ,树边当作两条单向边。 (a) 为根的子树答案是 (0) ,问题是不知掉根在哪里。类似拓扑排序,取出入度 (1) 的节点,更新周围节点入度。最后剩下的点度数为 (0) ,就把它作为根,然后 DFS 一下,不要经过 ({a}) 中的点,标记到的点答案为 (1) ,没有到的点答案为 (0)。如果没有这样的点,说明有环,画图可以发现所有点答案都是 (0)

    Orz

    记住先打暴力,这样至少不会爆 0 吧……输出格式,看好了小朋友!

    03.26 [JSOI2018] [AGC]

    A. 战争

    裸的柯和( Minkowski Addition ),运气可能比较好碰巧看过,就是求 ({c}={a+b}) ,把两个凸包上的轮廓向量极角排序之后再做一次凸包就可以得到 ({c}) ,然后判断点是否在新的凸包内:二分,叉积。

    B. 机器人

    除了斜率 (1) 方向的格子全是同一个方向以外我好像啥也不懂,挖坑。

    C. 列队

    贪心。找到最大的 (t) 使得 (a_t le k+t-1) ,然后 (t) 就将两边的人划分开,算答案时就不需要加绝对值符号了。

    持久化线段树,维护区间内人的数量,人的位置的和,最右的人的位置,然后在递归中传一下可以放人的区间,根据左区间最右的人的位置决定一边贡献答案,另一边递归一下, (O(n log n))

    然而卡常, awsl ,悄悄说一句被卡常的部分我空间也少开了一个 (log) ,完蛋。

    Orz

    快一个月没碰几何了,差点裸题不会做,那真就白给了呀……

    所以看了一波模板,补了两个小东西:

    1. 线段判交。快速排斥实验,就是 Kd-Tree 用来剪枝的那个东西,用线段的外接矩形判交,然而这只是线段相交的必要条件;跨立实验,就是当且仅当 (a) 两端点跨过直线 (b)(b) 两端点跨过直线 (a) 时,线段 (a,b) 相交。 跨过直线的充要条件是,设 (x=(a_0 ightarrow b_0) imes (a_0 ightarrow b_1),y=(a_1 ightarrow b_0) imes (a_1 ightarrow b_1)) ,则 (xy < 0)
    2. 多边形重心。就是各个三角形重心,以面积为权值的加权平均数。把各个三角形重心数乘上三角形面积,加起来作为分子,分母是多边形面积。

    [AGC021E Ball Eat Chameleions]

    红色和蓝色,分别作为 (x,y) 坐标,枚举红球蓝球数量 (r,b) ,转化为 ((0,0) ightarrow (r,b))

    有的路径不合法。贪心地,优先先后给除一号宠物外的每个宠物 (r,b) ,无法做到时就给一号宠物。分析可以发现这样尽量让所有宠物变红了。一号宠物的红色球个数是 (r-(n-1))

    • (r>b) ,如果 (y-x ge r-(n-1)) ,那一号宠物就不能变红了。
    • (r=b) ,如果 (y-x ge r-(n-1)) ,或者最后一个球,也就是最后给一号宠物的球,是红色,那一号宠物也不能变红。所以这时路径是 ((0,0) ightarrow (r,b-1))

    然后就是快速算不能经过直线的路径数,用 Catalan 的分析方法算一算就好了。好神仙啊这题。

    抱歉,我忘了名字

    题意:序列中有 (0,1) 和通配符,相邻三个数字可以变成出现最多次的那个,求最后剩下 (1) 的方案数。

    wxh 的 DP 没看懂,大概能理解“毕克自动机”做法。就是普通的自动机构造,但是神奇地贪心了,有的状态总是比能同样能转移到的另一个状态好,所以每个点 (0,1) 对应的转移可以贪心地恰好构造为唯一的,这很重要。然后跑匹配, DP 算最后停在某个节点的方案数。

    序列自动机

    听到有大佬在说序列自动机,看了 OB's blog 里面 FJOI2015 那道序列自动机的题。就是维护每个字符后面添加一个字符能匹配到的最近的位置,类似链式前向星,用处是在公共子序列相关问题, (O(|S| cdots n))。听说 PopoQQQ 用主席树能把复杂度中字符集大小那里加个 (log) ,没仔细看,咕咕咕。

    03.27 [某名校 NOI 模拟] [雅礼 2018 Day10]

    A.

    题意:长度 (2n) 的序列,比如 (0829) 是 good 的,因为 (02+98=10^n) 。给一个含通配符的序列,求是 good 的方案数。

    性质是两个数字对位相加的结果做高到低是若干个 (9) ,一个 (10) ,然后若干个 (0)

    然后枚举 (a) 是结果为 (10) 的那个数字,即方案中一定有 (a+b=10) , DP 。

    B.

    题意:环上有一些权值,有一个点权均匀分布在 ([a,b]) ,然后求什么概率。

    把未知点权设为 (x) ,每个点的答案是一个一次函数,假设已经知道了。然后就是一些半平面 ((k>0)) 求上凸包,每条直线的答案的分子就是它在凸包上 (x) 坐标的差。

    然后求那些一次函数,发现可以 (O(n)) 暴力 (1) 号点答案,前缀和推出其他的点 (i) 作为起点的答案。但是由于环的性质需要分类讨论 (jge i)(j>i) 两种情况。

    C.

    咕咕咕。

    A. 「雅礼集训 2018 Day10」足球大战

    式子写出来,注意特判 (p,q)(0,1) 的情况,因为不存在逆元。开空间,开常,只能 (O(n)) ,只能开一个逆元数组。

    B. 「雅礼集训 2018 Day10」文明

    据 Newuser 大佬说是虚数裸题 世界树 弱化版。某个点属于一个国家的充要条件是距离最小,或者距离相等时,国家的行动标号最小。

    C. 「雅礼集训 2018 Day10」贪玩蓝月

    裸线段树分治,注意背包时需要开一个临时变量存答案,因为模意义下不能简单通过枚举顺序来保证物品仅有一个。

    03.28 [小概率是雅礼集训]

    A. arg

    题意:给出长度 (m) 的序列,求 (1)(n) 排列中, LIS 是该序列的个数。

    DP 套 DP ,求 LIS 的一种做法是: (f(i,x)) 表示前 (i) 个数字,长度 (x) 的 IS 的最小末尾数字,然后每次贪心地更新状态,或者把当前数字接到某个 IS 后面,作为当前最长的 IS 的末尾数字。

    按照套路,果然又发现第二维是单调不降的。所以如果随便放数字而不是恰好放一个排列的话,直接差分,然后二进制状压内层 DP 第二维就可以。考虑数字有限制时,对数字状压,三种状态:未讨论,讨论过并且在内层 DP 的第二维,讨论过但不在内层 DP 第二维。每次枚举未讨论的数字进行转移,如果放了一个给定序列中的数字 (a_i) ,需要保证 (a_{i-1}) 已经讨论过。模仿内层 DP 更新状态,或者把数字接到末尾就行了。

    B. bsh

    题意:给三角剖分图,边权为 (1) ,询问两点间最短路。

    类似 旅行者 (好像是这个名字),那是一道网格图分治。这道题对多边形分治就好了。

    然而我码力太差,写了非常久,第一次用 vector<vector>

    C. cti

    题意:一些有向炮台,可以打一炮,但是弹道不能相交,求最大收益。

    网络流。某条弹道过了交叉点,另外一边就不能过。转化一下限制,调整边的方向,拆点,加上限制,跑最小割。

    Orz

    今天翻车了 Orz ……虽然一直很菜,不过……一言难尽。

    三道题开场就看出了考察方向,然后挑了最熟悉的 DP 模型,以为是裸题能很快水过,然后 3h 过去了。分治题一开始以为是有简单性质,最后一个小时才觉得只能分治。思路简单,然而没写过类似的题,暴力。网络流日常心理障碍,尝试克服,无法克服,开始暴力,发现暴力打着真费劲,放弃。

    然后就翻车了。

    教训:网络流还是多想想吧,毕竟性价比比较高,不像复杂 DP 或者数据结构之类的东西容易白耗时间。然后相信:我一定能在 30min 内写对 200 行代码。

    03.29

    上午打我和 211 的互测题。

    A 题裸 Mobius + 莫队,成功用 (n=m=a_i=100) 的假样例让 hdhd 大佬看错输入格式,拍了一个小时没挂,最后 10 分。我没有被阿,嘿嘿。
    B 题组合数求和,需要模型转化,考虑一三象限有一些点,求路径方案数, DP 一下。
    C 题正解是差分之后线段树维护,找右边第一个大于 (v) 的位置。 hdhd 大佬 map + 势能分析通过。考虑许多单调区间,修改操作会使得一些区间合并,一开始有 (n) 个长度 (1) 的区间,修改操作只会增加至多 (2) 个区间。

    03.30 [自闭省选模拟]

    A.

    题意:给一棵树,有一些炸弹在节点上,造成的伤害每扩展一条边就 (-1) ,直到为 (0) ,求每个节点受到的伤害和。

    点分治,计算子树中炸弹对其他子树的伤害(实际上也贡献到了炸弹所在子树中,所以每次统计答案时需要对所有儿子再进行一次负贡献来消除影响)。然后差分 + 后缀和统计每个深度的答案。

    B.

    小C的锦标赛弱化版, (n=5000)

    题意:求至少含一个 (k) 元环的带标号竞赛图数量。

    考后补的竞赛图性质:

    1. 如果竞赛图含有 (k) 元强连通分量,那么存在所有 ([3,k]) 元环。
    2. 竞赛图的拓扑序唯一,即缩点后入度为 (0) 的点仅一个。

    问题转化:求至少包含一个 (ge k) 元强连通分量的竞赛图数量。

    先考虑 (n) 个点且包含 (n) 元强连通分量的竞赛图数量 (f(n)) ,设 (g(n)) 表示任意竞赛图数量,枚举点集中最小点最小的强连通分量,然后关联的所有边起点只能是该点集:

    [g(n)=sum_{i=1}^{n}f(i)g(n-i)(^n_i) ]

    再次转化问题,设仅由 (<k) 元强连通分量组成的竞赛图数量 (s(n))

    [s(n)=sum_{i=1}^{k-1}f(i)s(n-i)(^n_i) ]

    答案是 (g(n)-s(n)​) 。然后变化一下式子,多项式求逆。

    C

    题意:给一棵树,代价轻边 (1) ,重边 (lceil log_2^{l}+1 ceil) ,叶子代价为到根代价和。求叶子代价最大值最小是多少?

    正解神仙贪心 + DP ,长链剖分可过 60 。

    Orz

    注意卡常,调整心态,信仰暴力能得分,就算 Subtask 什么的也要信仰。

    03.31 [自闭 AGC030] [51nod 省选模拟 2019 第三轮]

    AGC030 E

    模型转化,红线蓝线,选一个匹配, (O(n)) 计算当前答案,总共 (O(n^2))

    AGC030 F

    全 -1 时是 Catalan 数,推广, DP 。

    [51nod] A.

    两个分母互素的分数之和为整数,这两个分数分别为整数。如果明白了这一点,并且会写 Pollard Rho ,您就可以通过此题。

    [51nod] B.

    咕咕咕,神仙计数。

    [51nod] C.

    SBT 套 Trie ,可是我不明白 Trie 维护权值是什么意义,但据说这种操作是一种对给定区间排序的套路。

    04.01 [长乐一中集训]

    A. 遮天蔽日

    计算几何,多边形重心。

    B. 三元组

    题意:求序列中 (A[l,mid],B[mid+1,r]) 满足 (A,B) 是回文串的所有情况的 (sum l imes r)

    (Ans = sum x_i y_{i+1})(x_i) 表示以 (i) 结尾的回文串的左端点下标和, (y_i) 表示以 (i) 开头的回文串右端点下标和。 Manacher ,差分,前缀和。

    C. 最优价值

    最大权闭合子图。

    Orz

    又翻车了,再不提前打暴力我就 XX 。网络流模型以为套不上最大权,一直卡在最小割上了。主要是策略有问题,最后几十分钟一道题没做,竟然还不打暴力,企图搞出 C 题。

    04.02 [HNOI 2018 省队集训 6-25] [Newcoder 2018 ACM]

    A. gift

    题意:定义序列 (A) 变成到 (B) 的代价为需要执行交换两个位置的数字这个操作至少进行的次数。给两个有空位的序列,求代价为 ([0,n-1]) 的方案数。

    神仙题。至少交换次数等于 (n-p) ,其中 (p) 为置换中循环节个数。如果两个序列都是给定的,那么问题就是求环的数量。

    对于空位,分为三类连边:空位仅在左,仅在右,左右有。然后斯特林和容斥部分我还不太理解。

    B. girl

    题意:给出 (a,b,c,n) ,求 (sum_{0 le i < j < k < n}ai+bj+ck) ,满足 (i,j,k) 中任取两个均不存在于给出的限制集合 ({(x,y)}) 中。

    没有限制,算下 (a,b,c) 的系数就可以了,得到答案 (s)

    有限制,设 (x) 表示至少满足 (i,j) 存在于限制集合的三元组的贡献和,类似地,设出 (y,z) ,答案为 (s-|x cup y cup z|) ,容斥一下。

    形如 (|x|,|x cap y|) 的部分比较容易求,考虑计算 (|x cap y cap z|) ,即三元环的贡献。

    根据 luogu 上的 post ,这个可以 (O(m log m)) 做。对于无向图,度数大的向度数小的定向,相等时根据标号随便定一下。

    这样构造的是一个 DAG 。然后:

        for (0 <= i < n) {
            for (i -> j)
                mark[j] = i;
            for (i -> j)
                for (j -> k)
                    if (mark[k] == i)
                        papapa
        }
    

    string

    SAM + LCT 。

    [Newcoder] The number of circuits

    看一下 BEST Theorem ,暴力高斯消元算下答案,扔进 BM 里。

    所以营养成分主要是 BEST Theorem 和复习高消。

    04.04 [FJWC2019 DAY1]

    全连

    一开始粗略算了下数据范围以为要写高精,看了下时限以为要用一个 long long 和一个 int 模拟高精卡常。然而并不需要,两个限制,主席树会爆空间,所以每次并不直接加入状态,扔到堆里面,需要用到的时候再拿出来,在线段上上做对应修改。

    原样输出

    从后往前建立 SAM ,然后对于没有转移的点,连向上一个字符串的转移位置,得到一张 DAG ,拓扑排序算一下从起点出发的方案数。

    不同的缩写

    搜索 + 剪枝 + 二分图匹配。一个串如果有超过 (n) 个子序列,一定可以完美匹配。

    染色问题

    题意: (n imes m) 的棋盘, (c) 种颜色。要求每行每列至少一个格子要染色,每种颜色至少出现一次,求方案数。

    容斥一下,发现形如 ((-1)^i(^n_i)f(i)) 的式子还可用二项式定理收起来, (O(n^2 log n))

    子集

    题意:求数列 ({a}) 所有子集中前 (k) 大的数和的和,对所有 (i in [1,n]) 输出答案。

    设从大到小排名为 (i) 的数字为 (a_i) ,所有子集中第 (k) 大的数的和是 (c_k) ,有:

    [c_k = sum_{i=k}^{n} (^{i-1}_{k-1})2^{n-i} ]

    可以得到一个 (c_k=sum_{i=k}^{n} f_i g_{i-k}) 的式子,卷积。

  • 相关阅读:
    如何生成不规则形状的mask,以解决对图像不规则区域设置ROI的问题
    数字图像处理学习1
    opencv显示图像
    Calling Matlab Neural Network From Other EXE's
    这个百度文档很给力
    opencv不规则ROI——圆形ROI
    问题修改
    skinsmagic美化MFC界面
    第一次使用思维导图
    libsvm使用介绍中文版
  • 原文地址:https://www.cnblogs.com/ghcred/p/10471247.html
Copyright © 2011-2022 走看看