Sync solutions from hanyixuanten/luogu@6852bea
1 parent
131b4bf5c8
commit
f8678e958b
2 files changed
+71
No files matched your search
+70
@@ -0,0 +1,70 @@
|
||||
# CSPS 2026 游记
|
||||
|
||||
华二紫竹,$2026-10-31T14:30+08:00 \sim 2026-10-31T18:30+08:00$。
|
||||
|
||||
## timeline (git commit history):
|
||||
|
||||
- 14:39 init (带 diff.sh)
|
||||
- 14:58 T1 45 pts
|
||||
- 15:26 T1 100 pts
|
||||
- 15:34 为 T1 写了 gen
|
||||
- 16:04 T2 20pts(实际 36 pts)
|
||||
- 16:15 T2 60 pts(实际 68 pts)
|
||||
- 16:19 T2 开 long long
|
||||
- 16:22 T1 对拍发现有一个变量没开 long long(感谢 diff.sh)
|
||||
- 16:50 为 T2 写了 gen(然而 gen 的数据并不保证图连通 这个考场上导致好多次误判)
|
||||
- 17:07 因为 T2 gen 的构造的数据问题导致不必要的 long long 和特判
|
||||
- 17:59 依旧卡 T2,T3 T4 毫无推进
|
||||
- (约)18:20 发现 T2 并无问题,尝试写 T3 T4 暴力,然而时间不够
|
||||
|
||||
## T1
|
||||
|
||||
最开始以为答案是关于最终相等的数单调的,想写二分,发现第二个样例证伪了这一结论。发现最终相同的数一定是 $a_i (i \in [1, n])$。
|
||||
|
||||
先写了个 [45pts 的暴力](https://git.vblg.top/hanyixuanten/csps2026/src/commit/bf08016dee210d518b187b7730a4f8f27ae47f24/crystal/crystal.cpp)。此时考试已开始 28 min。
|
||||
|
||||
考虑到使用二分 + 前缀和优化[寻找 ans 的过程](https://git.vblg.top/hanyixuanten/csps2026/src/commit/bf08016dee210d518b187b7730a4f8f27ae47f24/crystal/crystal.cpp#L12-L13)。但是因为二分出来的答案一直多 1 或少 1,就出现了[这几行代码(笑哭)](https://git.vblg.top/hanyixuanten/csps2026/src/commit/8b21377d1fa3208ef8d27b7592e91d1dbf8a40fc/crystal/crystal.cpp#L22-L23)。
|
||||
|
||||
然而,最开始的时候 [checkb 函数的 now 没开 long long](https://git.vblg.top/hanyixuanten/csps2026/src/commit/8b21377d1fa3208ef8d27b7592e91d1dbf8a40fc/crystal/crystal.cpp#L7),差点 100->65,diff.sh 立大功。
|
||||
|
||||
附 [gen.cpp](https://git.vblg.top/hanyixuanten/csps2026/src/commit/c9a42541c404d2b6395e49b9c35e4eb71109327b/crystal/gen.cpp)。
|
||||
|
||||
## T2
|
||||
|
||||
其实考试开始 34 min 就想出了[“500 条线路各视为图上的一个点,分别和地铁站连线”](https://git.vblg.top/hanyixuanten/csps2026/src/commit/64eda003fc35794e1805274785a058db89a21eeb/subway/subway.cpp#L49),但是由于无负边权,自然的想到了 dij,后续又加入了预处理优化,16:15 写完后发现并不能通过最后两个大样例(3s)。然而并没有想到 $O(n^3)$ 的 Floyd 在这种情况下更快。(写这篇记录的时候还没有正式出成绩,若 CCF 的评测机发力则可能多点分。)
|
||||
|
||||
附 [gen.cpp](https://git.vblg.top/hanyixuanten/csps2026/src/commit/e4991898d0b1585aa9d86a0737da057bd388de58/subway/gen.cpp)。注意这个 gen.cpp 生成的图不保证连通,所以如果代码输出了 inf 或是负数一般是图不连通导致,可忽略。
|
||||
|
||||
## T3 T4
|
||||
|
||||
由于死磕 T2 连暴力都没有写,血亏 20-60pts。
|
||||
|
||||
## 总结
|
||||
|
||||
1. 对拍、diff.sh 立大功。
|
||||
2. 由于随机数只会用 time(0) 作为种子,导致对拍效率大大下降,连续拍了半个小时才发现 T1 的问题。
|
||||
3. 过度的死磕 T2 导致 T3 T4 暴力没写。
|
||||
4. 对算法复杂度 (dij) 有错误估测,忽视冷门算法 (Floyd),导致 T2 100 -> 68。
|
||||
|
||||
附 diff.sh(linux,注意对拍代码均无需开文件读写):
|
||||
|
||||
```sh
|
||||
#!/bin/bash
|
||||
|
||||
g++ sol1.cpp -o sol1 -O2 -std=c++14 -static
|
||||
g++ sol2.cpp -o sol2 -O2 -std=c++14 -static
|
||||
g++ gen.cpp -o gen -O3 -std=c++14 -static
|
||||
for i in {1..10000}; do
|
||||
gen > in
|
||||
sol1 < in > a
|
||||
sol2 < in > b
|
||||
if ! diff -q a b > /dev/null; then
|
||||
echo wa
|
||||
cp in wa.in
|
||||
cp a wa1.out
|
||||
cp b wa2.out
|
||||
break
|
||||
fi
|
||||
echo success $i
|
||||
done
|
||||
```
|
||||
+1
@@ -11,6 +11,7 @@
|
||||
- [[CF1187E|CF1187E]]
|
||||
- [[CF1380D|CF1380D]]
|
||||
- [[CF1912E|CF1912E]]
|
||||
- [[CSPS2026|CSPS2026]]
|
||||
- [[P1453|P1453]]
|
||||
- [[P2016|P2016]]
|
||||
- [[P2607|P2607]]
|
||||
|
||||
Reference in new issue
Block a user