首页 > 其他分享 >题解 AtCoder Beginner Contest 267 A~H

题解 AtCoder Beginner Contest 267 A~H

时间:2023-09-22 20:14:00浏览次数:36  
标签:题目 Contest 题解 sum solution 节点 267 Problem Robin

ABC267 solution

https://atcoder.jp/contests/abc267/

Problem A. Saturday

题目描述

输入一个表示星期的英文字符串,输出:还有多少天到星期六?

solution

依题意模拟。\(O(1)\)。

Problem B. Split?

题目描述

Robin 有十个小球,如图排列成这样,然后 Robin 将一些球击飞了,他告诉你哪些球被击飞,然后问你一下这两个条件是否都满足:

  • 1 号球被击飞。
  • 存在两个不同的列(图中用虚线分割成七列),满足这两列分别还有至少一个球没被击飞,它们中间有一列球全部被击飞。

solution

依题意模拟。\(O(1)\)。

Problem C. Index × A(Continuous ver.)

题目描述

Robin 给你数列 \(a\) 和正整数 \(m\),然后定义长度为 \(m\) 的数列 \(b\) 的价值 \(f(b)\) 为 \(\sum_{i=1}^mi\cdot b_i\),然后 Robin 要求你求出一个 \(a\) 的连续子序列,使得这个连续子序列的长度为 \(m\) 且价值 \(f\) 最大。

solution

观察到我们可以枚举所有的长度为 \(m\) 的连续段,只有 \(O(n)\) 个,且已知 \(i\) 开始的连续段,那么 \(i+1\) 开始的连续段的价值是可以轻易计算的。

\(f([i+1,i+m])=f([i,i+m-1])+(m+1)a_{i+m}-\sum_{j=i}^{i+m}a_i.\)

使用前缀和优化。\(O(n)\)。

Problem D. Index × A(Not Continuous ver.)

题目描述

Robin 给你数列 \(a\) 和正整数 \(m\),然后定义长度为 \(m\) 的数列 \(b\) 的价值 \(f(b)\) 为 \(\sum_{i=1}^mi\cdot b_i\),然后 Robin 要求你求出一个 \(a\) 的可以不连续的子序列,使得这个可以不连续的子序列的长度为 \(m\) 且价值 \(f\) 最大。

solution

背包。设 \(f_{i,j}\) 表示前 \(i\) 个数字已经选出 \(j\) 个数作为子序列的前 \(j\) 个数。

\(f_{i,j}=\max(f_{i-1,j},f_{i-1,j-1}+a_i\cdot j)\)。\(O(n^2)\)。

Problem E. Erasing Vertices 2

题目描述

Robin 有一个图,图上的点有点权。然后 Robin 要反复进行以下操作,直到图中没有节点:

  • 选择一个未被删除的节点,删除这个节点和这个节点相连的边。
  • 这次操作的代价是与这个节点有边相连且还没有被删除的点的点权和。

Robin 需要你合理安排删除节点的顺序使得所有操作的代价的最大值最小。

solution

考虑每次贪心选出代价最小的节点删除。删除了这个节点之后,动态维护一下其他点的删除代价,然后重复这个过程。明显这样是最优的,因为考虑二分答案的时候,每次拿出 \(\leq mid\) 代价的节点,实际上拿出这些节点的顺序是无所谓的,且只会使得其他点的代价尽可能小,所以不需要二分答案而是直接贪心。

线段树或者二叉堆维护。\(O(n\log n)\)。

Problem F. Exactly K Steps

题目描述

Robin 有一棵树,他有 \(m\) 次询问,每次询问他给你 \(u,k\),你需要输出树上的一个节点 \(v\) 满足 \(dist(u,v)=k\),或者报告无解。

\(dist(u,v)\) 表示树上 \(u\) 到 \(v\) 的最短路径的边数。

solution

考虑求出每个点能到达的最远点,如果 \(k\) 超出这个范围则必然无解,否则在它到最远点的路径上任意截取 \(k\) 条边,取出向最远点走 \(k\) 条边到达的点。

使用换根 DP 求出最远点,使用倍增 LCA 求出树上 \(k\) 级祖先(查询一条链上走 \(k\) 步等价于从某个端点向上跳祖先)。\(O(n\log n)\)。

Problem G. Increasing K Times

题目描述

Robin 有一个序列 \(a\),然后他想知道有多少 \(n\) 阶排列 \(p\) 满足 \(\sum_{i=1}^{n-1}[a_{p_i}<a_{p_{i+1}}]=k\)。

solution

题目等价于重排 \(a_i\) 后恰好有 \(n-k\) 个极长严格递增子段,不妨消除相同数字影响(\(ans_0=\prod_i(\sum_j[a_j=i])!\)),并使得 \(k:=n-k\)。

考虑插入 DP,设 \(f_{i-1,j}\) 表示已经考虑了 \(<i\) 的数字,当前有 \(j\) 个极长上升连续段,设 \(<i\) 的数字实际上有 \(s\) 个。然后考虑插入 \(i\),情况分为三类:

  • 插在某个连续段后面,不影响段数。
  • 插在某个数字前面,不能是连续段开头的前面(除了最开头的前面),一共 \(s-j+1\) 个位置,增加段数。
  • 插在第一类的后面使他重复,增加段数。

设 \(c_1,c_2,c_3\) 分别是三类的个数,那么方案数是 \(\binom{j}{c_1}f(c_2,s-j+1)f(c_3,c_1)\),其中 \(f(n,m)=\binom{n+m-1}{m-1}\) 表示 \(n\) 个无标号小球放进 \(m\) 个有标号盒子的方案数。然后 \(\sum_{c_2+c_3=a_i-c_1}f(c_2,s-j+1)f(c_3,c_1)\) 是可以范德蒙德卷积的,证明过程完全一致,可以直接写成 \(f(c_2+c_3=a_i-c_1,s-j+1+c_1)\),然后暴力枚举状态和 \(c_1\) 进行转移即可。\(O(n^2)\)。

还有其他的方式进行转移,差不多。还有容斥的。

Problem H. Odd Sum

题目描述

Robin 有 \(n\) 个物品,第 \(i\) 个物品的重量是 \(a_i\),求有多少种选奇数个物品的方案,使得物品重量和恰好为 \(m\)。

solution

分治 NTT。分治时求出左右两边的答案,将选奇数个还是偶数个数字作为状态,用四个多项式乘出两个多项式。然后因为值域很小所以复杂度正确。然后可能要优化一下 NTT 次数。\(O(n\log^2n)\)。

codes

https://atcoder.jp/contests/abc267/submissions?f.Task=&f.LanguageName=&f.Status=&f.User=caijianhong

标签:题目,Contest,题解,sum,solution,节点,267,Problem,Robin
From: https://www.cnblogs.com/caijianhong/p/solution-abc267.html

相关文章

  • AtCoder Beginner Contest 318 ABCDE
    AtCoderBeginnerContest318A-FullMoon思路:等差数列求项数//AConemoretimes//nndbk#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintmod=1e9+7;constintN=2e5+10;intmain(){ios::sync_with_stdio(false);......
  • AtCoder Beginner Contest 320 ABCDE
    AtCoderBeginnerContest320A-LeylandNumber思路:直接快速幂//AConemoretimes//nndbk#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintmod=1e9+7;constintN=2e5+10;llqmi(lla,llb){llans=1;whil......
  • AtCoder Beginner Contest 253 E
    AtCoderBeginnerContest253E-DistanceSequence思路:前缀和优化DP要求$|a[i]-a[i+1]|>=k\(定于\)dp[i][j]:\(前\)i\(个数以\)j\(结尾的合法序列数列\)dp[i][j]+=dp[i-1][1~(j-k)]+dp[i-1][(j+k)~m]$直接写的话复杂度是\(O(nm^2)\)的会TLE,我们发现可以做一个前缀和优化......
  • Django跨域问题解决
    Django跨域问题解决今天在学习前端Vue框架的过程中,遇到了跨域相关问题问题1详情:AccesstoXMLHttpRequestat'http://127.0.0.1:8000/book/'fromorigin'http://localhost:63342'hasbeenblockedbyCORSpolicy:No'Access-Control-Allow-Origin'headerispre......
  • P5836 [USACO19DEC] Milk Visits S - 洛谷题解
     题目链接:[P5836] USACO19DEC] MilkVisitsS-洛谷|计算机科学教育新生态(luogu.com.cn)这道题可以用并查集来解决。题目中每个结点只有两个状态:H和G。那么我们可以推断出,只有当起点和终点间每个结点的状态相同但是起点(或者终点或起点到终点之间的某一点)与所需状态不同......
  • 苏格拉底问答,问题解决
     ......
  • 题解 P8670 [蓝桥杯 2018 国 B] 矩阵求和
    题目描述\[\sum_{i=1}^n\sum_{j=1}^n\gcd(i,j)^2\]具体思路solution1显然可以每次枚举\(\gcd(i,j)\)的取值。\[\sum_{k=1}^nk^2\sum_{i=1}^n\sum_{j=1}^n[\gcd(i,j)=k]\]令\(i=\lfloor\frac{i}{k}\rfloor\),\(j=\lfloor\frac{j}{k}\rfloor\)。\[\sum......
  • 【UVA 11175】From D to E and Back 题解(图论)
    取具有n个顶点和m条边的任意有向图D。你可以在以下方式。E将有m个顶点,每个顶点对应于D的每条边。例如,如果D有一条边uv,那么E将有一个叫做uv的顶点。现在,每当D有边uv和vw时,E就会有边顶点uv到顶点vw。E中没有其他边。你将得到一张E图,并且必须确定E是否有可能是某些有向图D的图的卧......
  • CF38H 题解
    problem&blog。远古场翻到的一个不错的题,提供一个好想很多的做法。求出任意两点的路径在全部路径中是第几个。然后随便找两个人,钦定他们是Au吊车尾与CuRank1。这样子就可以直接求出全部人可以是否可以拿AuAgCu了。然后就是傻子DP了,往状态里塞Au与Ag的人数,转移......
  • MUH and Cube Walls 题解
    MUHandCubeWalls前言怎么题解区同质化这么严重,16篇题解全是差分+KMP,就没有人写别的做法吗。(好吧其实是我一开始没想到差分才有了这么多奇怪做法)题目大意给定两个序列\(a,b\),求\(b\)在\(a\)中出现了多少次。我们定义\(b\)在\(a\)的出现次数为:\[\sum_{i=1}^n......