Loading

22.11 杂题

一个做题记录,大部分题目都是一句话题解,小部分题目可能会有更详细的题解。

1~4 CSPS2022

解题报告

ABC275G Infinite Knapsack

ABC275Ex Monster

ZR22noip十连测Day7A

ZR22noip十连测Day7B

ZR22noip十连测Day7C

ZR22noip十连测Day7D

CF1401E Divide Square

CF1401F Reverse and Swap

CF1401F Avoid Rainbow Cycles

ZR22冲刺day7D D

ZR22冲刺day9C 旅行

eJOI2021 Waterfront

eJOI2021 AddK

eJOI2021 XCopy

eJOI2021 Kpart

eJOI2021 Dungeons

eJOI2021 BinSearch

ZR22noip十连测day5A 菜

ZR22noip十连测day5B 狗

ZR22noip十连测day5C 可

ZR22noip十连测day5D 爱

2022-11-2 NOIP模拟赛A. 2048

2022-11-2 NOIP模拟赛B. 花国の旅行

2022-11-2 NOIP模拟赛C. 恰糖果

2022-11-2 NOIP模拟赛D. 快速转圈排序

loj3033 JOISC2019Day2 两个天线

97Keys

邮戳拉力赛

EASY

棋盘游戏

数列递推

旅游路线

七曜圣贤

序列划分

CF1558A

CF1558B

CF1558C

CF1558D

CF1558E

CF1558F

模拟赛

CF1672A

CF1672B

CF1672C

CF1672D

CF1672E

CF1672F1

CF1672F2

CF1672G

CF1672H

CF1672I

LG7520 省选2021 支配

LG5073 Ynoi2015 世上最幸福的女孩

ARC058F 文字列大好きいろはちゃん

CF722F Cyclic Cipher

LG7126 [Ynoi2008] rdCcot

ZR22noip十连测day8A

ZR22noip十连测day8B

ZR22noip十连测day8C

ZR22noip十连测day8D

CF1369A. FashionabLee

随便画一画可以发现当 \(n\) 为奇数或者 \(n/2\) 为奇数时都不行,证明也比较显然,必须分成两半且都为偶数才行。

CF1369B. AccurateLee

要求长度尽量短,那么显然中间一大段都可以删掉只剩下一个,两边留下前缀 0 和后缀 1。又要求字典序尽量小所以剩下一个 0 即可。

CF1369C. RationalLee

显然最大的 \(k\) 个都可以取到,那么先分配出去。对于 \(w_i=1\) 的部分取最大的几个即可,假设 \(w_i\ge 2\)。最小值显然要取,贪心地让第二、三......小被藏起来,所以按 \(w\) 从大到小考虑把这些融进去即可。

CF1369D. TediousLee

一个 \(i\) 级的树是由两个 \(i-2\) 和一个 \(i-1\) 加上一个根构成的,于是有大体的递推式子:\(f_i=2f_{i-2}+f_{i-1}\),然后枚举几种情况发现当 \(3\mid i\) 的情况根可以额外搞一个,所以最终的递推式是 \(f_i=f_{i-1}+2f_{i-2}+[3\mid n]\)

CF1369E. DeadLee

如果存在某个菜不会被吃超过其数量次,那么我们把吃这些菜的人放到最后去,这样就尽量减少对其他菜的消耗。重复这个过程,直到所有人合法或者所有菜都不够吃(DEAD)为止。

CF1369F. BareLee

赢的部分。当 \(e\) 是奇数的时候,直接考虑奇偶性。当 \(s\in (\frac{e}{2},e]\) 时,显然只用考虑 \(s\) 的奇偶性。而 \(s\in(\frac{e}{4},\frac{e}{2}]\) 部分先手一定必胜。否则可以递归为 \(\frac{e}{4}\) 的子问题。

输的部分。当 \(2s>e\) 的时候显然可以直接直接输,否则递归成 \(e'=\frac{e}{2}\) 的情况看后手是否必胜。

那么现在知道了每局游戏是否能赢,倒着考虑枚举每局游戏,求出当前需要是先手还是后手才能保证必胜或者必败,最后判断是否都是先手即可。

CF985G Team Players

简单容斥,考虑钦定0,1,2,3条边的答案,前三种都很好算,最后一种用一个黑科技【三元环计数】,就可以 \(O(m\sqrt{m})\)

CF1474A Puzzle From the Future

显然第一步是尽量长,于是就尽量和前一位不一样,然后再尽量搞的更大。

CF1474B Different Divisors

找三个质数即可。

CF1474C Array Destruction

考虑最大的那个数,他肯定不能用来凑别人,所以第一轮一定是凑他和另一个,枚举一下,然后从大到小考虑每个数。和一定是上次的最大值即可。

CF1474D Cleaning

这种题都先考虑第一个和最后一个数,它们一定要和旁边的一起减,所以可以处理一段前缀和后缀,枚举交换的位置,最后最多剩下 \(4\) 个数,再暴力判断一遍。

CF1474E What Is It?

显然每次交换都会使得某个数归位,所以每个数只能贡献一次,那么对于 \(i\in [n/2,n]\),一定是和 \(1\) 配最优,反之一定和 \(n\) 配。那么直接构造,举个例子 \(n=6\)\(p=\{4,3,1,5,6,2\}\)。交换时先换 \((i,1),i\in [n/2+1,n-1]\),再换 \((i,n),i\in[2,n/2]\),最后换 \((1,n)\)

CF1474F 1 2 3 4...

第一问是好求的,由于这个 LIS 一定在值域上是连续的,所以枚举最小最大值即可知道长度。先枚举一个左端点,一定是某一段区间的结尾,然后再往后求出最大值即可。

考虑一组最小最大值,求出最左和最右,得到一些区间,显然这些区间无交,于是可以对每个区间 \([L,R]\) 分别做。\(f_{v,i}\) 代表当前权值为 \(v\) 在第 \(i\) 段的方案数,显然有转移 \(f_{v,i}=\sum\limits_{j=L}^{i-1} f_{v-1,j}\),当然有值的前提第 \(i\) 段包含 \(v\) 这个值。于是值域会被分成 \(O(n)\) 段,使得每段的转移是相同的。矩阵快速幂优化转移即可。

GYM104053E Elevator

相当于每个电梯在 \(-x_i\),每次可以把最大的,编号最小的值减一,要求使得 \(i\) 是编号最小的最大值的步数。那显然是都怼到 \(-x_i\) 处然后算一算有多少编号比 \(i\) 小的即可。这个可以树状数组,复杂度 \(O(n\log n)\)

GYM104053H GameX

最优策略肯定是每次找到一个最小的还没出现的自己会输的数值填上,所以直接搞两个指针指一指就好了, 复杂度 \(O(n)\)

GYM104053L Station of Fate

\(n\) 个数分成 \(m\) 组,每组至少一个人的方案数是 \(\binom{n-1}{m-1}\),再分配上顺序,总和就是 \(n!\binom{n-1}{m-1}\)

GYM104053I Infection

\(f[i,j]\) 代表以 \(i\) 为根的子树选了 \(j\) 个节点,不定根的概率,\(g[i,j]\) 代表定根的概率,然后转移的时候就分类讨论一下根有没有定即可。根据树形背包的理论,复杂度为 \(O(n^2)\)

GYM104053M XOR Sum

从大到小考虑每一位,枚举有多少为卡到上界,再枚举 \(0,1\) 的个数,那么就可以算出低位对高位的进位,把这个也记入状态中转移即可。复杂度是个很小的东西,所以应该咋写都能过。

GYM104053B Ayano and sequences

不知道为什么acm赛制这么板的数据结构题切的人那么少。

操作一用珂朵莉树维护,并维护时间戳。操作二用线段树维护即可。时间复杂度 \(O(n\log n)\)

GYM104053J Math Exam *

显然有 \(a_i=a_{i-1}+2\) 或者 \(-a_{i-1}\)。设 \(b_i=|\frac{a_i+1}{2}|\),然后 \(a\) 的变化呈现在 \(b\) 上面就是 \(b_{i}=b_{i-1}+1\)\(b_{i}=b_{i-1}-1\),于是变成了经典的格路计数问题。处理组合数前缀和,不同的终点显然是连续的。

GYM104053K Middle Point Graph *

四个随机的点共面的概率显然为 \(0\)。分类讨论,四个点都是边的中点,直接四元环计数。三个边,一个点,只能是三元环。两个点,两个边,有两种情况:一条边以及其两个端点,再加上随便一条边;两条相邻的边以及除了公共点的那个点。以及一条边,三个点。除了这条边的端点其他都能选。

GYM104053C Customs Controls 2

\(1\) 号点到每个点的路径长度为 \(d_i\),那么要求即为可以到同一个点的的点的值相同,有直接相连的边的两点要一大一小,于是直接差分约束即可。其实不需要,并查集+拓扑排序即可。

GYM104053A Alice and Her Lost Cat *

\(f[i,j,0/1]\) 代表 \(i\) 子树内要查 \(j\) 个叶节点的最小值,是否有一个叶子不用被查。

有转移 \(f[i,j,0]=\min(a_i+\min_{\sum_{k_o}=j}(\min f[v_o,k_o,0/1],\min_{\sum_{k_o}=j}f_{v_o,k_o,0})\)\(f[i,j,1]=\min_{\sum_{k_o}=j}(\min f[v_o,k_o,0/1])\),只能有一个地方最后一维取到 \(1\)

复杂度 \(O(n^2)\)

UER XI A 切割冰片

cnblogs.com/zcr-blog/p/16909813.html

UER XI B

cnblogs.com/zcr-blog/p/16909813.html

UER XI C

cnblogs.com/zcr-blog/p/16909813.html

AGC037A Dividing a String

从前往后贪心,如果和之前的字符串不同就断开,并更新最后一次字符串为当前的串,否则就继续添加一个字符串到末尾。

AGC037B RGB Balls

最小的方法就是分别找到最前的位置,那么我们只需要P3和P1不变即可。从前往后维护 R,G,B,RG,GB,RB(后面三个两个字母的顺序无所谓)的数量,然后就可以直接算了。

AGC038C Numbers on a Circle

考虑倒着做,找到 \(B\) 的最大值减去 \(B_{i-1},B_{i+1}\)。然后如果存在一个 \(B_i=A_i\) 就删掉这个数,复杂度 \(O(n\log n\log V)\)

AGC038D Sorting a Grid

B 到 C 的过程只能交换每一列,那么也就要求每一列不能存在在 D 中同一行的点,于是给 D 中每行的数染上同一种颜色,不同行不同颜色。我们知道 A 中每行都有哪些颜色,想要每列颜色不同。那么每种颜色建点,每一行建一个点,如果某一行有某种颜色就连一条边,求一个完美匹配就是一列的方案,求 \(n\) 次即可,复杂度 \(O(nm^2\sqrt{n})\)

AGC029F Construction of a tree

点到集合连边,显然需要存在完美匹配。找到没有匹配的点作为根,枚举它能到的集合,找到这个集合匹配的点,这俩点一组,然后继续找,根据匹配的性质显然成立。

AGC034C Tests

二分 s,当 \(a_i\ge b_i\)\(c_i\)\(r_i\),否则取 \(l_i\)。那么设 \(f_i(x)=\{l_ix(x<b_i),l_ib_i+r_i(x-b_i)(x\ge b_i)\}\)。只用判断 \(\sum f_i(a_i)\)\(\sum l_ib_i\) 的大小即可。贪心考虑一定只有一个位置 \(a_i\in [0,X-1]\),枚举这个位置,选答案即可。

Qoj686 Yandex Cup 2020 B. Bad Doctor

每种药需要的次数是所有区间的并集,考虑删除那个庸医。对每种颜色离线做,共有 \(\sum K_i\) 个区间,考虑删除某个区间,查询最小值是 \(0\) 的个数即可。线段树直接做,复杂度一个 \(log\)

Qoj687 Yandex Cup 2020 C. Topological Ordering

直接暴力状压dp,暴力合并求答案,复杂度 \(O(2^nn^2)\)

Qoj532 毛营 Winter 2021 Day 4 PKU Contest 1 H. Longest Loose Segment

建立小根堆笛卡尔树,然后维护 mx,sz和ans,考虑合并跨过根的区间,显然一定是以整个子树最左边或最右边为一个端点的情况,直接转移即可,\(O(nm)\)

posted @ 2022-10-30 15:17  Semsue  阅读(97)  评论(0编辑  收藏  举报
Title