Skip to content

Commit 5126d54

Browse files
committed
gpdate 比赛总结
1 parent 20b3f6f commit 5126d54

File tree

4 files changed

+217
-1
lines changed

4 files changed

+217
-1
lines changed
File renamed without changes.

contest.200849.md

+72
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
# SCP 2024 S - SunOct13 2024
2+
36 + 8 + 0 + 32 = 76。从分数看我确实写了部分分。
3+
4+
评级难度的人也觉得这个模拟赛比往年难点……不然也不会评三个紫。
5+
6+
注意力涣散的一次模拟赛。下面的思路看似连贯,实际上每行都卡了几分钟,长的十几分钟。
7+
8+
T1 第一眼以为是删不同位置的代价不一样。
9+
- 过了一会儿才知道是删不同数字的代价不一样。
10+
- 考虑把删数字换成加数字。
11+
- 想到了枚举初始状态(最后一次删除的)
12+
- 逐个考虑加数字。
13+
- 加数字的顺序并不重要。
14+
- 只要初始状态确定,整个代价就确定下来了
15+
- 初始状态长度不会超过 5 位数,因为 6 位数里删一个数子可以不会得到更大的代价。
16+
- 暴力枚举肯定不行要 DP 枚举子序列。
17+
- 状态设 $f(r,i)$ 表示以下标 $i$ 结尾,前面有 $r$ 个数的子序列的……
18+
- 代价?
19+
- 初始状态数字?
20+
- 初始状态每位数子对应的代价和?
21+
- ……
22+
- 想到了设三个,$f$ 总代价,$g$ 初始状态数子,$h$ 初始状态每位数子对应的代价和。
23+
- 考虑转移
24+
- 由 $(r-1, j)\{r-1\le j<i\}$(是不是减一视实现下标起点而变化)转移而来。可以通过一边转移一边更新 $j$ 实现线性求解。
25+
- 差不多 1 个小时了看看后面的题。
26+
- $f(r,i)=\min(10g(r-1,j)+s_i+\sigma-h(r-1,j)-v(s_i))$,$s_i$ 是原数字(长达 100000 位的整数)的第 $i$ 位,$v(x)$ 是数码 $x$ 的代价。这步确定下来犹豫了很久。
27+
- $$\sigma=\sum_i v(s_i)$$
28+
这个挺好想的只是因为行间公式换了一行。
29+
- $$g(r,i)=10g(r-1,j)+s_i$$
30+
$$h(r,i)=h(r-1, j)+v(s_i)$$
31+
$j$ 是使上面最小值成立的下标。这很显然,当时也不知道干吗想这么久。
32+
- 初始化也很显然,但是纠结了很久要不要额外的数组存这两个结果。
33+
$$g(0, i)=s_i$$
34+
$$h(0, i)=v(s_i)$$
35+
- 转移修修改改确定下来后考虑代码实现。
36+
- 多组数据,如果不用初始化的实现方式,只要在合法状态内转移影响不大。
37+
- 要用滚动数组吗,实现有什么区别。
38+
- 设了三个 DP 的话是不是可以简化 $f$ 的表达式
39+
$$f(r,i)=g(r,i)+\sigma-h(r,i)$$
40+
- 怎么更新 $j$(这有什么好想的可是真卡了我好些时间)。
41+
- 这个最小值里的不随 $i$ 变化:
42+
$$\begin{align*}
43+
&\min(10g(r-1,j)+s_i+\sigma-h(r-1,j)-v(s_i)) \\
44+
=&\min[10g(r-1,j)-h(r-1,j)]+s_i+\sigma-v(s_i)
45+
\end{align*}$$
46+
- 所以比较 $10g(r-1,j)-h(r-1,j)$ 和 $10g(r-1,i)-h(r-1,i)$ 就好……
47+
- 大概写完了,开始调代码,可是怎么调结果都会大一点……
48+
49+
2h 时放弃调试。只过了一个样例,实际得分 36。现在思路都是很自然的不能理解自己当时为什么想那么久。
50+
51+
- T2 开始手算样例。自然看一条链的。
52+
- 一开始以为链都有解。
53+
- 算了好久感觉有点树形 DP 的味道,因为有点子问题的意思。
54+
- 可是怎么处理 -1 的操作啊。
55+
- 考虑每个子树能不能调成一样的温度然后一层层合并?
56+
- 但是链又很特殊……
57+
- 然后一直模拟样例没什么思路。
58+
- 终于意识到操作有交换律,把 +1 和 -1 分开。
59+
- 问题相当于把一棵树的点权分解成两棵树,其中一棵是表示 -1 的点权和,另一棵是 +1 的点权和?
60+
- 尝试很多样例后才意识到列方程。
61+
- 代数式修修补补,设输入的树上点权是 $a(u)$,方程、不等式能这样描述:
62+
- $\forall u,\ x(u)\ge\max\{a(u),0\}$:节点 $u$ 减少的值非负;减少后不能是正数,不然怎么加都不能加到 0。
63+
- $x(u)=\sum_{(u,v)\in T} x(v)$:减少的值有孩子减少的决定。
64+
- $\forall(u,v)\in T,\ x(u)-a(u)\le x(v)-a(v)$:减少后增加的量中,上级节点要增加的不能多于孩子增加的,因为上级节点的增加都会叠加给孩子。
65+
- 找几个样例验证了一下发现没问题。
66+
- 没细想怎么解了,明明都是一次的却想不出实现,我好菜。
67+
68+
T3 要输出方案没想到什么方法暴力,但 T4 的平方时间很好想,就去写 T4 了。
69+
70+
可 T4 也是磕磕绊绊,结束前 2 分钟才调完。
71+
72+
综上,只有 T1 写挂了,后面都是智力因素(确信)。但是我想东西想得好慢啊。

contest.x1.md

+142
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
# CSP-S 2024 复赛冲刺卷 1 - SatNov2 2024
2+
信友队供题,原题面不公开。
3+
4+
理论:$100+100+80+10=290$;实际:$85+60+60+0=205$
5+
6+
## math
7+
有一个长度为 $n$ 的序列 $\{a\}$。$q$ 次询问 $(l,r)$。对于每一个问题,输出
8+
$$\#\{[x,y]\subseteq[l,r]|a_{l,l+1,\cdots,r}\ 中既有奇数,又有偶数\}$$
9+
10+
## art
11+
一个 $n\times m$ 的矩形,`B` 黑色,`W` 白色。每次可以让一整行黑色的变成白色,白色的变成黑色。可以重复任意多次。
12+
13+
进行任意多次行取反操作后,最大的正方形色块的大小是多少(一块连续的颜色相同的区域)。该正方形的边界必须与画纸平行。
14+
15+
### note
16+
单调队列维护最小
17+
18+
## bio
19+
$n$ 种植物。它们排列成从左到右的一条直线。它们的高度相互不同。
20+
21+
一只蚂蚁一直在做往返的运动,蚂蚁会朝着它当前所面对的方向,移动到第一个比它当前所在植物更高的植物上,之后,蚂蚁会改变运动的方向。
22+
23+
> 如果蚂蚁在运动前/面朝左边,那么到达新的植物后,它将面朝右边,反之亦然。蚂蚁会一直运动,直到它面朝的方向上没有比当前植物更高的植物为止。
24+
25+
涛涛记录了所有植物的生长情况和每一次蚂蚁做往返运动开始的植物编号和初始方向,他希望每一次你都能告诉他,蚂蚁会在哪里停下来。
26+
27+
### 输入格式
28+
第一行包含两个整数 $n$ 和 $m$,分别表示植物的数量和记录的数量。植物从左向右编号依次为 $1,2,3,\cdots, n$
29+
30+
第二行包含 $n$ 个不同的整数 $H_1, H_2, \cdots, H_n$,其中 $H_i$ 是第 $i$ 棵植物的初始高度。
31+
32+
接下来的 $m$ 行按时间顺序描述涛涛的记录,每行对应一个记录。
33+
34+
如果表示某棵植物的生长,该行包含大写字母 `U`,后跟两个整数 $\mathrm{id}$ 和 $H$ ,表示植物 $\mathrm{id}$ 的新高度是 $H$;新高度 $H$ 大于植物 $\mathrm{id}$ 的旧高度,并且与其他植物的当前高度不同。
35+
36+
如果某条记录表示蚂蚁的运动,该行包含大写字母 `L``R`,后跟一个整数 $j (1 ≤ j ≤ n)$,表示蚂蚁从植物 $j$ 开始运动;如果字母是 `L`,则蚂蚁开始时面朝左边;如果字母是 `R`,则蚂蚁开始时面朝右边。
37+
```
38+
n m
39+
h1 h2 ... hn
40+
U i h'
41+
L/R j
42+
```
43+
44+
### 输出格式
45+
对于每次蚂蚁的运动,输出一行,包含一个整数,表示蚂蚁停止运动的植物编号。
46+
47+
### 数据范围
48+
- 对于 20% 的数据,$n,m ≤ 300$
49+
- 对于 40% 的数据,$n,m ≤ 5000$
50+
- 有额外 20% 的数据,满足没有出现 `U`,即植物没有生长
51+
52+
对于 100% 的数据,$n,m ≤ 200000$
53+
54+
保证在任何时候都满足 $0 ≤ H_i ≤ 10^9$, 并且数据完全随机.
55+
56+
## eng
57+
一个字符串 $s$,初始状态下 $s=s_0$。有 $n$ 个字符串,为 $t_1 ,t_2 , ..., t_n$。任意时刻,仅有一个 $t$ 处于激活状态,称为激活串。初始状态下,$t_{x_0}$ 激活。在任意时刻 $s$ 是激活串的某个**子串**
58+
59+
假设现在笔记本上的字符串为 $s$,处于激活状态的字符串为 $t_x$,3 种操作:
60+
1. 激活串不变,花费 $a(x, c)$ 的代价,在 $s$ 的两端**加上**一个相同的字符 $c$(修改后仍须满足 $s$ 与 $t_x$ 的某个子串相等)
61+
1. 激活串不变,花费 $b(x, c)$ 的代价,在 $s$ 的两端**去除**一个相同的字符 $c$(修改后仍须满足 $s$ 与 $t_x$ 的某个子串相等)
62+
1. 将激活串从 $t_x$ 变成 $t_y$ ,这需要花费 $| x - y |$ 的代价。需要注意的是,要满足条件 $| x - y | ≤ k$。(须满足 $s$ 与 $t_y$ 的某个子串相等)
63+
64+
把 $s$ 变成 $s_1$,并且激活串是 $s_{y_0}$ 的最小的累计代价是多少?如果无法实现则输出 $-1$。
65+
66+
本题所述字符串仅包含小写字母。
67+
68+
### 输入格式
69+
第一行两个整数 $n$ 和 $k$
70+
71+
接下来 $3n$ 行,每三行的组成如下:
72+
1. 第一行是一个字符串,表示 $s_i$
73+
2. 第二行是 26 个整数,对应规则 1 对应的代价 $a(i, c)$
74+
3. 第二行是 26 个整数,对应规则 2 对应的代价 $b(i, c)$
75+
76+
然后是一行一个整数和一个字符串,表示 $x_0$​ 和 $s_0$​。
77+
78+
最后是一行一个整数和一个字符串,表示 $y_0$ 和 $s_1$。
79+
```
80+
n k
81+
st1
82+
a1a a1b ... a1z
83+
b1a b1b ... b1z
84+
st2
85+
a2a a2b ... a2z
86+
b2a b2b ... b2z
87+
...
88+
stn
89+
ana anb ... anz
90+
bna bnb ... bnz
91+
x s y t
92+
```
93+
### 样例
94+
Input 1
95+
```
96+
2 1
97+
ababa
98+
1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
99+
1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
100+
ababa
101+
1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
102+
1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103+
1 a
104+
2 bab
105+
```
106+
Output 1
107+
```
108+
2
109+
```
110+
Input 2
111+
```
112+
4 4
113+
aaabaaaabbbbaabbaaaabbaaaaabbabababaababaaaba
114+
769 365 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115+
26 582 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116+
abbabbbaabbbbbbabbaabaaaabbaaaabbabbaaabaabaa
117+
867 224 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118+
679 367 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119+
baaabaabaababbbababaaaababbbabbbabbbaabbaaaba
120+
86 237 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121+
894 888 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122+
aaaababbbaaabbababbabbaaaabbaaaabaaabaaaabaab
123+
813 672 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124+
757 323 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125+
3 abaaaaba
126+
1 aabbaaaabbaa
127+
```
128+
Output 2
129+
```
130+
2523
131+
```
132+
133+
### 数据范围
134+
- 对于 10% 的数据,n = 1,每个单词的长度 ≤ 500,字母仅有 a 和 b
135+
- 对于 30% 的数据,n ≤ 10,每个单词的长度 ≤ 2000,字母仅有 a 和 b
136+
- 有额外 15% 的数据,K = 1
137+
- 有额外 20% 的数据,字母最多只有三种
138+
139+
k ≤ n ≤ 1e5; 单词总长度 ≤ 1e6; a,b≤2000
140+
141+
### note
142+
对哦为什么不骗点分呢?

readme.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ github: <https://github.com/xiao-ming-hub/Notes>
1717
- [降雨量 | 模拟/分类讨论](luogu.p2471.md)
1818
- [逻辑表达式 | 模拟 表达式解析](luogu.p8815.md)
1919
- 比赛总结
20-
- [春季测试 2023 (VC)](contest102679.md)
20+
- [CSP-S 2024 模拟 1](contest.x1.md)
21+
- [SCP 2024 S](contest.200849.md)
22+
- [春季测试 2023 (VC)](contest.102679.md)
2123
- 算法、模板
2224
- [dp/树形](dp-tree.md)
2325
- [dp/最长上升子序列](lis-print.md)

0 commit comments

Comments
 (0)