2026-09-24 14:30–17:00 · 7 名参赛学生 · 95 次提交 · T1–T5 五道题
点上面的板块切换;点「全部展开」一次看完,方便打印。
2026 年 9 月 24 日 [赛前模拟] J组难度小超班 比赛结束后,对 7 名参赛学生的 95 次提交 (比赛当天 94 次 + 赛后补题 1 次)做的完整复盘:每一发做了什么、思路怎么演变、和正解差在哪。
| 板块 | 看什么 |
|---|---|
| 总览 | 比赛信息、成绩表、统计口径 |
| 总结 | 所有结论汇总:四个横向发现、三种思维形态、三个「差一步」、训练建议 |
| 逐人流程 | 每人每次提交「这一发在干什么」+ 打法分析 + 与正解的距离 |
| 状态轨迹 | 每次提交改了哪几个字符(红删绿增)、改动类型、评测耗时/内存 |
| 思路轨迹 | 每人每题的模型切换路径:起点 → 转折 → 卡点 → 终态 |
| 完整时间线 | 95 次提交按时间排开 |
| 题目与正解 | T1–T4 的题意、正解骨架、数据范围与踩坑点 |
| 附录 | 判题机异常清单、统计口径说明 |
| 项目 | 内容 |
|---|---|
| 比赛名称 | [赛前模拟] J组难度小超班 |
| 时间窗口 | 2026-09-24 14:30 – 17:00(2.5 小时) |
| 题目 | T1 超常班叠叠乐 / T2 一般凹凸序列 / T3 超常班的走廊巡逻 / T4 Sanhai 群岛的“优质”桥梁 / T5 [Wzhoi2026] 梦开始的地方 |
| 参赛人数 | 18 人(本报告统计其中有提交的 7 名学生) |
| 提交次数 | 比赛当天 94 次 + 赛后补题 1 次 |
| 排名 | 姓名 | 总分 | T1 | T2 | T3 | T4 | T5 | 当天提交次数 |
|---|---|---|---|---|---|---|---|---|
| 1 | 张恩博 | 220 | 100 | 100 | — | 20 | — | 24 |
| 1 | Vicco_Li | 220 | 100 | 100 | 0 | 20 | 0 | 25 |
| 1 | Guagua111 | 220 | 100 | 100 | 0 | 20 | — | 15 |
| 1 | crkr | 220 | 100 | 100 | 0 | 20 | — | 14 |
| 5 | 钟如杉 | 100 | — | 100 | — | — | — | 4 |
| 5 | NaiLong | 100 | — | 100 | — | 0 | — | 6 |
| 7 | 徐浩然 | 95 | 0 | 95 | — | — | — | 6 |
这批学生的强项是「结论题 + 构造题」,短板是「建模题」;而真正吃掉分数的是三个和算法无关的东西: 类型宽度、边界对齐、自测缺失。
int 溢出,不是算法Guagua111 和 crkr 都拿到「逻辑完全正确但 ans/数组是 int」的 10 分。
crkr 从 16:03 到 16:08 连交 9 发、耗 71 分钟,最后 AC 的唯一实质改动就是 int a[] → ll a[];
Guagua111 的 10 分版与 AC 版差别也只是类型宽度。本题答案可达 10¹⁶ 量级,这是最该在赛前统一强调的一条。
8 人共 37 发,轨迹清一色 0 → 5 → 40 → 45 → 65 → 70 → 95 → 100。
改的东西基本是:循环边界差 1、尾部多输出一个数、cout<<1e9(输出成 1e+09,
张恩博连掉 4 发)。真正换思路的只有两三次。
15:13–15:20:5 次 Compile Error——NaiLong 的 T2 连续 3 发提交 MD5 完全一致的代码
(WA → CE → CE → 第 3 次 AC);Guagua111 同一份代码先 CE、2 分钟后 AC。
16:01:crkr 在 36 秒内连交 3 发 T1,三次都被判「题目配置错误。找不到输入文件 1.in。」。
这 8 次提交不是选手的问题,复盘统计时应剔除。
95 次提交里有 10 次是把同一份代码原样再交:其中 6 次是判题机故障后的重试(应当剔除),
剩下 4 次完全没有意义(张恩博 2 次、Vicco_Li 2 次),另有 1 次只改了空白。
而「假装在改」的典型有两次:徐浩然把 mx-a[i] 改成 abs(mx-a[i])(完全等价);
Vicco_Li 在 T1 上 6 发把哨兵值在 -1e9 / -1e18 / 1e9 / 1e18 之间来回换,相似度全部 >0.98。
| 形态 | 特征 | 代表 | 缺什么 | 怎么补 |
|---|---|---|---|---|
| 换模型型 | 卡住就推倒重来,相似度会掉到 0.55 以下;换对一次就过 | 张恩博、钟如杉、(后期)Vicco_Li、Guagua111(T2/T3) | 换完模型不验样例 | 强制「改完先手算一遍题目样例再交」 |
| 磨参数型 | 模型已对但不会定位失败原因,连续多发相似度 >0.95 | crkr、Guagua111 的 T1、NaiLong | 本地自测 | 要求提交前必须本地跑通样例 + 一组自造数据 |
| 增量推广型 最危险 | 模型本身是错的,却把它包装得更「通用」,越改越自信 | 徐浩然 T1、Vicco_Li T1 前 13 发 | 回头质疑模型本身 | 同一题卡满 3 发就停下来重读题、手推样例,而不是继续改 |
+1 归零,16:38 收手,此时还剩 22 分钟。每人一行一次提交:这一发在干什么 + 打法分析 + 与正解的距离。「赛中」列是距开赛(14:30)的分钟数。
| # | 时刻 | 赛中 | 题 | 判定 | 这一发在干什么 |
|---|---|---|---|---|---|
| 1 | 14:46:45 | +16′ | T1 | 0 Wrong Answer | 开局就交:把「还差多少层」按 0 切成两段,答案取两段各自最大值之和 —— 错模型(峰一多就漏算) |
| 2 | 14:52:13 | +22′ | T1 | 0 Wrong Answer | 把 cin 换 scanf、ans 显式初始化,逻辑一行没动 |
| 3 | 14:55:00 | +25′ | T1 | 0 Wrong Answer | 只加了个换行,继续没碰逻辑 |
| 4 | 15:19:52 | +49′ | T2 | 0 Wrong Answer | 转 T2:1/50001/2 交替铺,尾部 cout<<1e9 —— 1e9 是 double 字面量,输出成 1e+09,直接 0 分 |
| 5 | 15:20:15 | +50′ | T2 | 0 Wrong Answer | ★ 与上一发逐字节相同,原样重交 |
| 6 | 15:21:18 | +51′ | T2 | 0 Wrong Answer | 把 1e9 写成 1000000000 |
| 7 | 15:24:46 | +54′ | T2 | 0 Wrong Answer | 改成 1000000000-1(在猜数值上限) |
| 8 | 15:26:38 | +56′ | T2 | 65 Wrong Answer | 循环边界改 n-k-1、尾部下标从 0 起 —— 第一次拿到分,65 |
| 9 | 15:29:03 | +59′ | T2 | 95 Wrong Answer | 尾部补一个 <<b<< —— 95 |
| 10 | 15:32:20 | +62′ | T2 | 95 Wrong Answer | 补 if(n<3) 输出 -1 的边界分支 |
| 11 | 15:47:33 | +77′ | T2 | 95 Wrong Answer | 补 if(k==0) 分支,但尾部多打了一个数 |
| 12 | 15:47:55 | +77′ | T2 | 95 Wrong Answer | 把多余空格去掉再交一次 |
| 13 | 15:50:16 | +80′ | T2 | 100 Accepted | 去掉多余输出 → AC(T2 共 10 发、30 分钟) |
| 14 | 15:54:28 | +84′ | T1 | 0 Wrong Answer | 回 T1:只把换行去掉 |
| 15 | 16:15:56 | +105′ | T1 | 0 Wrong Answer | 推倒重来,换成「差分取正和」的正确思路,但漏了首元素和尾元素 |
| 16 | 16:19:01 | +109′ | T1 | 100 Accepted | 补上 diff[n+1]=maxn-arr[n] → AC(T1 共 6 发、跨 92 分钟) |
| 17 | 16:30:16 | +120′ | T4 | 0 Wrong Answer | T4 首交:Σ|相邻差| |
| 18 | 16:30:31 | +120′ | T4 | 0 Wrong Answer | 16 秒后重交一发(同样思路) |
| 19 | 16:31:55 | +121′ | T4 | 0 Wrong Answer | 输出换成 arr[2] |
| 20 | 16:32:40 | +122′ | T4 | 0 Wrong Answer | 换成 2*min(arr[2],arr[3]) |
| 21 | 16:32:56 | +122′ | T4 | 0 Wrong Answer | 只把 2 改成 2LL(改类型) |
| 22 | 16:33:44 | +123′ | T4 | 20 Wrong Answer | 换成 arr[2]+arr[3] → 20 分 |
| 23 | 16:36:42 | +126′ | T4 | 0 Wrong Answer | ★ 转向奇偶性:奇数取 a[i]、偶数取 a[i]-1,然后 ans+1 |
| 24 | 16:38:41 | +128′ | T4 | 0 Wrong Answer | 去掉 +1 → 仍是 0。16:38 停手,此时距比赛结束还有 22 分钟 |
打法:三段式,每段都靠「打补丁」推进。T1 开局即翻车,前 3 发只改了输入输出、没碰逻辑,然后冷藏 65 分钟转 T2;T2 用 10 发把自己从 0 分一路调到 100 分,其中前 4 发的失败全是「输出格式/数值写法」问题(1e9 输出成 1e+09、边界差 1、尾部多打一个数)。T1 直到 16:15 才推倒重来换成正确思路,补了尾部才过。
关键点:他是全组唯一在 T4 上真正换过模型的。16:30–16:33 连着 6 发在猜公式(Σ|Δ| → arr[2] → 2·min → a1+a2),16:36:42 那一发改用了一整套奇偶性分类(奇数取 a[i]、偶数取 a[i]−1),这已经是正解的核心,只是聚合方式没想对(多写了 +1)。16:38 停手时距结束还有 22 分钟,他没再用这段时间。
T1:6 发、92 分钟,最后靠正确模型+补尾部拿到。思路是对的,但「首尾边界」耗掉了他两次机会。
T2:正解构造,10 发 30 分钟。分数轨迹 0→0→0→0→65→95→95→95→95→100,典型的「判题机当编译器用」。
T4:最接近正解的一次尝试——奇偶性方向已找到,差最后一步的聚合。这是他这场最值得复盘的地方。
| # | 时刻 | 赛中 | 题 | 判定 | 这一发在干什么 |
|---|---|---|---|---|---|
| 1 | 14:44:30 | +14′ | T1 | 0 Wrong Answer | T1 首交:「遇到 max 就把当前段的最大缺口累加一次」的段模型(错) |
| 2 | 14:48:45 | +18′ | T1 | 0 Wrong Answer | 哨兵 -1e9 + 加条件 a[i-1]!=maxv,同一模型 |
| 3 | 14:49:48 | +19′ | T1 | 0 Wrong Answer | 把 n 从 int 改成 long long(与本题错误无关) |
| 4 | 14:50:51 | +20′ | T1 | 0 Wrong Answer | 改成累加 nwmaxv、缺口改存 maxv-a[i],继续试参数 |
| 5 | 14:53:05 | +23′ | T1 | 0 Wrong Answer | 把 max 换 min、哨兵换 1e9(方向反了) |
| 6 | 14:57:44 | +27′ | T1 | 0 Wrong Answer | 末尾补 a[n+1]=maxv、重写循环 —— 同一模型第 6 次,仍 0 分 |
| 7 | 15:18:38 | +48′ | T2 | 40 Wrong Answer | 转 T2:首交,构造「3 + (k-1)个2 + 0 + 一串2」→ 40 分 |
| 8 | 15:22:01 | +52′ | T2 | 0 Wrong Answer | 换成 1 3 2 4 循环 → 0 |
| 9 | 15:27:59 | +57′ | T2 | 0 Wrong Answer | 边界改成 n-k → 0 |
| 10 | 15:31:02 | +61′ | T2 | 70 Wrong Answer | 改成 a[] 查表取值 → 70 |
| 11 | 15:32:23 | +62′ | T2 | 70 Wrong Answer | 补 n-k-2==0 与 <0 两个分支 → 70 |
| 12 | 15:36:25 | +66′ | T2 | 45 Wrong Answer | 尾部填 -1 → 45(更差,退回) |
| 13 | 15:39:49 | +69′ | T2 | 100 Accepted | 尾部改成 lst±1(按倒数第二个数与最后一个数的大小选方向,保证接口必坏)→ AC。T2 共 7 发、21 分钟 |
| 14 | 15:43:09 | +73′ | T1 | 0 Wrong Answer | 重开 T1:换哨兵 -1e18 |
| 15 | 15:48:43 | +78′ | T1 | 0 Wrong Answer | ★ 与上一发逐字节相同,原样重交 |
| 16 | 16:05:43 | +95′ | T1 | 0 Wrong Answer | ★ 与上一发逐字节相同,原样重交 |
| 17 | 16:09:01 | +99′ | T1 | 0 Wrong Answer | ★ 与上一发逐字节相同,原样重交(三连空转,共 21 分钟) |
| 18 | 16:19:45 | +109′ | T1 | 0 Wrong Answer | 再换哨兵方向(1e18/min) |
| 19 | 16:35:02 | +125′ | T1 | 100 Accepted | 彻底换成正解写法(逐位比较,首元素补 maxv-a[1])→ AC。T1 共 12 发、跨 110 分钟 |
| 20 | 16:44:11 | +134′ | T4 | 20 Wrong Answer | T4:只写 n==3 分支(a1+a2)→ 20 |
| 21 | 16:50:56 | +140′ | T4 | 20 Runtime Error | ★ 改交 DFS 回溯:在链上枚举所有走法求最长,模型其实是对的,但指数级、吃到 251MB → RE |
| 22 | 16:51:24 | +141′ | T4 | 20 Runtime Error | 修手误 --b[u] → --b[u-1] |
| 23 | 16:51:54 | +141′ | T4 | 20 Runtime Error | 补上回溯恢复 ++b[u] |
| 24 | 16:53:15 | +143′ | T4 | 20 Runtime Error | 又把回溯恢复删掉、memcpy 换手写循环 |
| 25 | 16:56:28 | +146′ | T5 | 0 Time Exceeded | T5 交一发 O(len²) 枚举 gcd → TLE;赛后 19:10 又补了一发 T3,仍 WA |
| 26 | 19:10:24 | +280′ 赛后 | T3 | 0 Wrong Answer |
打法:最轴的一个,也最不会调试。T1 是全场投入最大的单题——12 发跨 110 分钟;前 6 发全在同一个错模型里换哨兵/换条件/换类型,一分没动。转 T2 后 7 发拿到 AC。回到 T1 之后出现了本场最典型的无效行为:15:48、16:05、16:09 三发是逐字节完全相同的代码,等于「再交一次看会不会变」;45 分钟后(16:35)才换成正解写法过了。
T4 反而是他思路最好的一次:拿到 20 分后立刻改写成一个 DFS,在链上带容量回溯枚举所有走法求最长——这就是正解的模型(一次行走 + 每条桥的访问次数预算),但他没意识到这条链上要的是「奇偶性分类」而不是「枚举」,于是 4 发全部 RE(250MB+)。16:56 又交了一发 T5,赛后 19:10 还回来补了一发 T3。
T1:12 发、110 分钟。问题不是不会,是 6 发没换模型 + 3 发原样重交。
T2:全场对「接缝处理」想得最细的一份(lst±1),一次到位。
T4:模型对、方法错。如果把 DFS 换成「奇偶性分类」,这题就是他拿下的。
| # | 时刻 | 赛中 | 题 | 判定 | 这一发在干什么 |
|---|---|---|---|---|---|
| 1 | 15:03:42 | +33′ | T2 | 0 Wrong Answer | T2 首交:1 3 2 4 循环 + 尾部 i+4(越界构造) |
| 2 | 15:08:50 | +38′ | T2 | 0 Wrong Answer | ★ 探针提交:把正式代码整段注释掉,只交一句 cout<<-1; |
| 3 | 15:13:40 | +43′ | T2 | 45 Wrong Answer | 恢复正式代码,尾部统一填 4 → 45 |
| 4 | 15:18:28 | +48′ | T2 | 0 Compile Error | 重写成 a[4]={4,1,3,2} + 末值复制 —— 判题机报 Compile Error |
| 5 | 15:20:02 | +50′ | T2 | 100 Accepted | ★ 与上一发完全相同,重交 → AC(那次 CE 是判题机侧的) |
| 6 | 16:08:30 | +98′ | T1 | 10 Wrong Answer | T1 首交:思路完全正确,但 ans 是 int → 溢出,只拿 10 分 |
| 7 | 16:09:03 | +99′ | T1 | 0 Wrong Answer | 加 #define int long long,但手抖把整个计算循环删空了 → 0 |
| 8 | 16:09:32 | +99′ | T1 | 100 Accepted | 51 秒后补回循环 → AC |
| 9 | 16:35:12 | +125′ | T3 | 0 Time Exceeded | T3 首交:BIT 从 0 下标起步 → lowbit(0)=0 死循环 TLE |
| 10 | 16:47:30 | +137′ | T3 | 0 Wrong Answer | 下标统一 +1 起(死循环解掉),模数仍是 2n |
| 11 | 16:53:28 | +143′ | T4 | 0 Wrong Answer | 模数换成 p=2(n-1)(关键一步),但区间没做折叠 |
| 12 | 16:53:44 | +143′ | T4 | 0 Wrong Answer | 写出折叠函数 f(x)(取模+翻折+镜像)→ 仍 WA(离正解只差区间跨 0 的处理) |
| 13 | 16:54:15 | +144′ | T4 | 20 Wrong Answer | T4:min(a1,a2) |
| 14 | 16:55:33 | +145′ | T3 | 0 Wrong Answer | 改 max(a1,a2) |
| 15 | 16:56:40 | +146′ | T3 | 0 Wrong Answer | 改成 max(a1+min(a1,a2), a2+min(a1,a2)),化简即 a1+a2 → 20 分,收工 |
打法:爱试探、动手快,但手抖。T2 第二发把代码整段注释掉、只交一句 cout<<-1;——这是明确的探针提交(用最小改动看判题反应),本组只有他这么做。T1 的过程最能说明问题:第一发思路完全正确,只因为 ans 是 int 溢出拿了 10 分;改成 long long 时手一抖把整个计算循环删空(0 分),51 秒后补回才 AC——同一道题的三种命运全在一分钟内。
T3 是全场对正解逼近得最完整的一条路径:第一发死循环 TLE(BIT 从 0 下标起步)→ 下标 +1 起(修掉死循环,还是 WA)→ 把模数从 2n 改成 2(n−1)(关键一步)→ 写出折叠函数 f(x) 并把镜像也过一遍 f。四发全 0,但每一发都在往正解靠,最后只差「查询区间跨 0 的拆分」这一层。
T1:逻辑一次就对,输在类型宽度和一次手误。
T2:5 发、17 分钟,最后一份构造和其它人同构且正确。
T3:4 发全 0,但是全组唯一把「模数 → 折叠 → 镜像」依次补齐的人,差最后一层区间拆分。
T4:3 发在 min/max 之间摇摆,最后拐弯写成 a1+a2,拿 20 分。
| # | 时刻 | 赛中 | 题 | 判定 | 这一发在干什么 |
|---|---|---|---|---|---|
| 1 | 14:57:08 | +27′ | T1 | 0 Wrong Answer | T1 首交:套刷题模板,从后往前差分取 |Δ| |
| 2 | 15:02:27 | +32′ | T1 | 0 Wrong Answer | 改成缺口数组取正差分和(思路已经对了)但 int 溢出 → 0 |
| 3 | 15:13:04 | +43′ | T2 | 5 Wrong Answer | T2 首交(该记录页无代码,判定 5 分) |
| 4 | 15:22:40 | +52′ | T2 | 0 Wrong Answer | T2 重写:1 3 2 4 循环 + i-=k 后查表 |
| 5 | 15:26:40 | +56′ | T2 | 100 Accepted | 循环拆两段、边界改 n-k → AC |
| 6 | 16:01:05 | +91′ | T1 | 0 Format Error | ★ 判题机报「题目配置错误。找不到输入文件 1.in。」—— 环境故障,白交 |
| 7 | 16:01:17 | +91′ | T1 | 0 Format Error | ★ 同上 |
| 8 | 16:01:41 | +91′ | T1 | 0 Format Error | ★ 同上(三连撞上环境故障) |
| 9 | 16:03:48 | +93′ | T1 | 0 Wrong Answer | 重写:首元素补 max,但循环写成 i<n 且条件写错 → 0 |
| 10 | 16:04:58 | +94′ | T1 | 10 Wrong Answer | 条件改成 a[i]-a[i+1]>0 → 10 |
| 11 | 16:07:22 | +97′ | T1 | 10 Wrong Answer | 补上 a[n+1](首尾都填 max)→ 10(还差类型) |
| 12 | 16:08:43 | +98′ | T1 | 100 Accepted | 把数组与 ans 从 int 换成 ll → AC。整场 T1 唯一的实质改动就是加宽类型 |
| 13 | 16:32:36 | +122′ | T3 | 0 Runtime Error | T3 唯一一发:2×1.6GB 静态数组 + scanf 少读一个 t → RE(4ms 就挂) |
| 14 | 16:57:50 | +147′ | T4 | 20 Wrong Answer | 收比赛前最后一发 T4:a[1]+a[2] → 20 分 |
打法:模板最熟、自测最少。代码骨架是标准刷题模板(solve(__CASE__)、typedef __int128、注释掉的常量),说明刷题量在这组里最大;但也是全场唯一在 T3 上「一次都不改就直接交」的人——2×1.6GB 的静态数组 + scanf 少读一个参数,4 毫秒就 RE 了,这两件事只要本地跑一次样例就会发现。
T1 的过程是本场最有代表性的一个现象:他的算法从第 2 发就已经正确,后面 9 发有 3 发撞上判题机「题目配置错误/找不到输入文件」的环境故障,剩下的都在敲细节,真正的转折是第 12 发把数组和答案从 int 换成 ll。也就是说这道题他花了 70 分钟,最后解决的是类型宽度问题,不是算法问题。
T1:9 发、71 分钟,其中 3 发被判题机环境故障吃掉;AC 的唯一实质改动是 int→ll。
T2:3 发 14 分钟拿下,效率最高的一题。
T3:唯一一发,思路(用大偏移把 W/E 坐标分开 + 镜像查询)其实已接近正解,但输入解析错了、内存超了 6 倍。
T4:最后一发 a1+a2,20 分。
| # | 时刻 | 赛中 | 题 | 判定 | 这一发在干什么 |
|---|---|---|---|---|---|
| 1 | 14:57:33 | +27′ | T2 | 0 Wrong Answer | T2 首交:只处理 k==0 与 k==n-2 两种极端 |
| 2 | 15:02:58 | +32′ | T2 | 0 Wrong Answer | k==0 分支改成 1 3 2 4 循环 |
| 3 | 15:15:08 | +45′ | T2 | 0 Compile Error | ★ 判题机报 Compile Error(代码本身没问题,同一时间窗另有 4 人 CE) |
| 4 | 15:19:48 | +49′ | T2 | 100 Accepted | 直接换成最终正确形态:前 k+1 个同值 + 其余走 1 3 2 4 循环 → AC |
全场最省提交的人:4 发、只做 T2。前两发只写了 k=0 与 k=n−2 两个极端分支(这是把子任务当全题做),第三发撞上判题机的 Compile Error(同一时间窗另有 4 人 CE),第四发直接跳到最终正确形态一次通过。
T2:4 发、22 分钟 AC,写法(前 k+1 个同值 + 其余 1 3 2 4 循环)与其它人的「尾部复制末值」不同,但对边界三元组的处理同样成立。
没有提交 T1/T3/T4——4 次提交里有 1 次是判题机故障。这场他只用了别人 1/6 的提交量拿到 100 分。
| # | 时刻 | 赛中 | 题 | 判定 | 这一发在干什么 |
|---|---|---|---|---|---|
| 1 | 15:14:44 | +44′ | T2 | 0 Wrong Answer | T2 首交(记录页只显示判题机提示,无代码) |
| 2 | 15:15:54 | +45′ | T2 | 0 Compile Error | ★ 与后一发逐字节相同 → Compile Error |
| 3 | 15:16:54 | +46′ | T2 | 0 Compile Error | 手工状态机推 1 3 2 4,尾部复制末值 |
| 4 | 15:18:26 | +48′ | T2 | 0 Compile Error | ★ 与上一发逐字节相同 → 又是 Compile Error |
| 5 | 15:20:25 | +50′ | T2 | 100 Accepted | ★ 同一份代码第 3 次提交 → AC。代码从头到尾没问题,是判题机编译服务不稳定 |
| 6 | 16:55:02 | +145′ | T4 | 0 Wrong Answer | T4:cout<<n+6; —— 放弃式提交 |
T2 的代码从第一发起就是对的,被判题机耽误了 5 分钟。5 发 T2 里,后 4 发的代码 MD5 完全一致:先 WA、再连续两次 Compile Error、第三次提交直接 AC。这不是他的问题,是判题机在 15:15–15:20 这段的编译服务不稳定(同一窗口共有 5 次 CE,其中钟如杉、Guagua111 的代码重交后也都 AC 了)。
16:55 的 T4 是明确的放弃:cout<<n+6;。
T2:手工状态机实现,一次写对;5 发、6 分钟里 4 发是判题机的锅。
T4:放弃式提交。全场 6 次提交,实际只认真做了 1 题。
| # | 时刻 | 赛中 | 题 | 判定 | 这一发在干什么 |
|---|---|---|---|---|---|
| 1 | 14:46:54 | +16′ | T1 | 0 Wrong Answer | 全场第一发(14:46:54):按 0 切成两段,答案取两段最大值之和 |
| 2 | 14:51:34 | +21′ | T1 | 0 Wrong Answer | 把两段推广成 m 段:遇 0 开新段、段内取最大、再求和 —— 仍是同一个错模型 |
| 3 | 14:52:47 | +22′ | T1 | 0 Wrong Answer | 只加了快读快写,逻辑没动 |
| 4 | 15:01:00 | +31′ | T1 | 0 Wrong Answer | 把 b[i]=mx-a[i] 改成 abs(mx-a[i])(b 本来就非负,无意义)→ 之后放弃 T1 |
| 5 | 15:34:24 | +64′ | T2 | 5 Wrong Answer | T2 首交:1 3 2 4 循环、余下直接输出 i-3 → 5 分 |
| 6 | 15:56:26 | +86′ | T2 | 95 Wrong Answer | 重写成 a[] 循环 + j 记录末值复制 → 95 分(余数段被 4 整除时整段跳过) |
全场第一个交卷的人(14:46:54),也是唯一没上 100 的。T1 的 4 发暴露同一个毛病:换着花样改,但从不换模型。他从「两段取最大」推广到「按 0 分段取最大再求和」——听起来更一般了,其实还是错的(一个段内出现两次高峰仍然只算一次);第三发只加了读入优化;第四发把 b[i]=mx-a[i] 改成 abs(mx-a[i])(b 本来就非负,等于什么都没做)。4 发之后他直接放弃了 T1。
T2 则是另一种极端:第一发朴素版拿 5 分,第二发重写后直接 95 分——思路和其它 7 个人完全一致且正确,只是用「每 4 个一次性输出」的写法时,当 n−k 恰好是 4 的倍数会整段跳过余数循环,j 保持全局初值 0,尾部变成了 0。
T1:4 发全 0、15 分钟内结束,此后再没碰过——错因是模型只对一半,而且 4 发都没触及这个核心。
T2:95 分。思路 100 分、实现 95 分,精确失败条件为 (n−k) % 4 == 0 且 k ≥ 1(本地 152 组枚举错 32 组,真实数据只打掉 1 个测点)。
如果他 T1 的第 2 发不是「推广分段」而是「回头验算样例 2」,这场的名次会完全不同。
看「改动幅度」判断他是在试参数还是在换思路,看「细粒度差异」的红删绿增判断他具体动了哪几个字符。评测耗时/内存是第二证据。
局部修补 46 次、首交 21 次、结构性改动 15 次、原样重交 10 次、重写 2 次、仅空白 1 次。涉及的知识点:常量 50、比较/边界 38、控制流 25、输出 25、下标 17、模运算 12、类型只有 7。
翻译一下:绝大部分时间花在改数字和改不等号上,而不是改算法。
| # | 时刻 | 判定 | 用时/内存 | 改动幅度 | 细粒度差异 |
|---|---|---|---|---|---|
| 1 | 14:46:45 +16′ | 0 Wrong Answer | 545ms 15.6 MiB | 首交 相似度 1.000 · +0/-0 行 | (首次提交本题) |
| 2 | 14:52:13 +22′ | 0 Wrong Answer | 174ms 15.8 MiB | 局部修补 相似度 0.918 · +3/-3 行 | ll ans;→ll ans=0;c→scanf("%d",&n);c→scanf("%lld",&arr[i]); |
| 3 | 14:55:00 +25′ | 0 Wrong Answer | 184ms 16 MiB | 局部修补 相似度 0.962 · +1/-1 行 | cout<<ans;→cout<<ans<<'\n'; |
| 4 | 15:54:28 +84′ | 0 Wrong Answer | 184ms 15.7 MiB | 局部修补 相似度 0.962 · +1/-1 行 | cout<<ans→cout<<ans; |
| 5 | 16:15:56 +105′ | 0 Wrong Answer | 182ms 15.9 MiB | 结构性改动 相似度 0.729 · +5/-9 行 | 新增 diff[i]=arr[i]-arr[i-1];ll →ll ans=0;for(int i=→for(int i=2;i<=n;i++){diff[i]→if(diff[i]>0){ |
| 6 | 16:19:01 +109′ | 100 Accepted | 2965ms 140 MiB | 局部修补 相似度 0.962 · +2/-1 行 | 新增 diff[n+1]=maxn-arr[n];for(int i=2;i<=n;i++){→for(int i=2;i<=n+1;i++){ |
| # | 时刻 | 判定 | 用时/内存 | 改动幅度 | 细粒度差异 |
|---|---|---|---|---|---|
| 1 | 15:19:52 +49′ | 0 Wrong Answer | 68ms 768 KiB | 首交 相似度 1.000 · +0/-0 行 | (首次提交本题) |
| 2 | 15:20:15 +50′ | 0 Wrong Answer | 72ms 808 KiB | 原样重交 相似度 1.000 · +0/-0 行 | 与上一发逐字节相同(MD5 一致) |
| 3 | 15:21:18 +51′ | 0 Wrong Answer | 46ms 1 MiB | 局部修补 相似度 0.975 · +1/-1 行 | cout<<1→cout<<1000000000<<' '; |
| 4 | 15:24:46 +54′ | 0 Wrong Answer | 44ms 828 KiB | 局部修补 相似度 0.996 · +1/-1 行 | cout<<1000000000<<' ';→cout<<1000000000-1<<' '; |
| 5 | 15:26:38 +56′ | 65 Wrong Answer | 40ms 768 KiB | 局部修补 相似度 0.991 · +2/-2 行 | for(int i=1;i<n-k;i++){→for(int i=1;i<n-k-1;i++){for(int i=→for(int i=0;i<k;i++){ |
| 6 | 15:29:03 +59′ | 95 Wrong Answer | 42ms 1 MiB | 局部修补 相似度 0.981 · +2/-2 行 | cout<<a<<' '<<b<<' ';→cout<<a<<' '<<b<<' '<<b<<' ';for(int i=→for(int i=1;i<k;i++){ |
| 7 | 15:32:20 +62′ | 95 Wrong Answer | 42ms 768 KiB | 局部修补 相似度 0.947 · +1/-0 行 | 新增 if(n<3) {cout<<-1;return 0;} |
| 8 | 15:47:33 +77′ | 95 Wrong Answer | 40ms 796 KiB | 局部修补 相似度 0.929 · +1/-0 行 | 新增 if(k==0) {cout<<a<<' '<<b<<' '<<c;return 0;} |
| 9 | 15:47:55 +77′ | 95 Wrong Answer | 41ms 768 KiB | 局部修补 相似度 0.993 · +1/-1 行 | if(k==0) {cout<<a<<' '<<b<<' '<<c;return 0;}→if(k==0) {cout<<a<<' '<<b<<' '<<c<<' ';return 0;} |
| 10 | 15:50:16 +80′ | 100 Accepted | 39ms 768 KiB | 结构性改动 相似度 0.692 · +1/-1 行 | if(k==0) {cout<<a<<' '<<b<<' '→if(k==0) {cout<<a<<' '<<b<<' ';return 0;} |
| # | 时刻 | 判定 | 用时/内存 | 改动幅度 | 细粒度差异 |
|---|---|---|---|---|---|
| 1 | 16:30:16 +120′ | 0 Wrong Answer | 130ms 2 MiB | 首交 相似度 1.000 · +0/-0 行 | (首次提交本题) |
| 2 | 16:30:31 +120′ | 0 Wrong Answer | 107ms 2 MiB | 原样重交 相似度 1.000 · +0/-0 行 | 与上一发逐字节相同(MD5 一致) |
| 3 | 16:31:55 +121′ | 0 Wrong Answer | 102ms 2 MiB | 局部修补 相似度 0.984 · +1/-1 行 | cout<<a→cout<<arr[2]; |
| 4 | 16:32:40 +122′ | 0 Wrong Answer | 107ms 2 MiB | 局部修补 相似度 0.947 · +1/-1 行 | cout<<arr[2];→cout<<2*min(arr[2],arr[3]); |
| 5 | 16:32:56 +122′ | 0 Wrong Answer | 114ms 2 MiB | 局部修补 相似度 0.996 · +1/-1 行 | cout<<2*min(arr[2],arr[3]);→cout<<2LL*min(arr[2],arr[3]); |
| 6 | 16:33:44 +123′ | 20 Wrong Answer | 100ms 2 MiB | 局部修补 相似度 0.954 · +1/-1 行 | cout<<→cout<<arr[2]+arr[3]; |
| 7 | 16:36:42 +126′ | 0 Wrong Answer | 106ms 1.3 MiB | 结构性改动 相似度 0.741 · +6/-3 行 | →if(arr[i]%2){ans+=a→ans+=arr[i];新增 }else{新增 ans+=arr[i]-1; |
| 8 | 16:38:41 +128′ | 0 Wrong Answer | 117ms 1.3 MiB | 局部修补 相似度 0.996 · +1/-1 行 | cout<<ans→cout<<ans; |
| # | 时刻 | 判定 | 用时/内存 | 改动幅度 | 细粒度差异 |
|---|---|---|---|---|---|
| 1 | 14:44:30 +14′ | 0 Wrong Answer | 484ms 4.3 MiB | 首交 相似度 1.000 · +0/-0 行 | (首次提交本题) |
| 2 | 14:48:45 +18′ | 0 Wrong Answer | 154ms 4.2 MiB | 结构性改动 相似度 0.566 · +5/-3 行 | int n, a[N], maxv = -1, nwmaxv = -1;→int n, a[N], maxv = -1e9, nwmaxv = -1e9;新增 ios::sync_with_stdio(false);新增 cin.tie(nullptr);if ((a[i] == maxv && i > 1) || i == n) {→if (((a[i] == maxv && i > 1) || i == n) && a[i - 1] != maxv) { |
| 3 | 14:49:48 +19′ | 0 Wrong Answer | 159ms 8 MiB | 局部修补 相似度 0.994 · +1/-1 行 | →LL n, a[N], maxv = -1e9, nwmaxv = -1e9; |
| 4 | 14:50:51 +20′ | 0 Wrong Answer | 162ms 8.2 MiB | 局部修补 相似度 0.987 · +2/-2 行 | ans +=→ans += nwmaxv;nwmaxv = max(nwmaxv, a[i]);→nwmaxv = max(nwmaxv, maxv - a[i]); |
| 5 | 14:53:05 +23′ | 0 Wrong Answer | 157ms 8.2 MiB | 局部修补 相似度 0.924 · +4/-4 行 | LL n, a[N], maxv = -1e9, nwmaxv = →LL n, a[N], maxv = -1e9, nwmaxv = 1e9;ans += nwmaxv;→ans += maxv - nwmaxv;nwmaxv = →nwmaxv = 1e9;nwmaxv = m→nwmaxv = min(nwmaxv, a[i]); |
| 6 | 14:57:44 +27′ | 0 Wrong Answer | 166ms 8 MiB | 结构性改动 相似度 0.657 · +8/-7 行 | LL n, a[N], maxv = -1e9, nwmaxv = 1e9;→LL n, a[N], maxv = -1e9, nwmaxv = -1e9;}→} a[n + 1] = maxv;for (int i = 1; i <= n; ++i) {→for (int i = 1; i <= n + 1; ++i) {if →if (a[i] == maxv) { |
| 7 | 15:43:09 +73′ | 0 Wrong Answer | 161ms 8 MiB | 结构性改动 相似度 0.743 · +6/-5 行 | LL n, a[N], maxv = -1e→LL n, a[N], maxv = -1e18, nwmaxv = -1e18;删除 for (int i = 1; i <= n + 1; ++i) {新增 for (int i = 1; i <= (n + 1); ++i) {if (nwmaxv == -1e→if (nwmaxv == -1e18) continue; |
| 8 | 15:48:43 +78′ | 0 Wrong Answer | 170ms 8.1 MiB | 原样重交 相似度 1.000 · +0/-0 行 | 与上一发逐字节相同(MD5 一致) |
| 9 | 16:05:43 +95′ | 0 Wrong Answer | 171ms 8.2 MiB | 原样重交 相似度 1.000 · +0/-0 行 | 与上一发逐字节相同(MD5 一致) |
| 10 | 16:09:01 +99′ | 0 Wrong Answer | 167ms 8.2 MiB | 仅空白/缩进 相似度 1.000 · +0/-0 行 | 仅空白/缩进差异 |
| 11 | 16:19:45 +109′ | 0 Wrong Answer | 170ms 8.1 MiB | 局部修补 相似度 0.835 · +5/-5 行 | LL n, a[N], maxv = -1e18, nwmaxv = →LL n, a[N], maxv = -1e18, nwmaxv = 1e18;if (nwmaxv == →if (nwmaxv == 1e18) continue;ans += nwmaxv;→ans += maxv - nwmaxv;nwmaxv = →nwmaxv = 1e18; |
| 12 | 16:35:02 +125′ | 100 Accepted | 2634ms 70.1 MiB | 结构性改动 相似度 0.656 · +13/-11 行 | }→}缩进 for (int i = 1; i <= →for (int i = 1; i <= n; ++i) {if (a[i] →if (a[i] >= a[i - 1] && i > 1) { |
| # | 时刻 | 判定 | 用时/内存 | 改动幅度 | 细粒度差异 |
|---|---|---|---|---|---|
| 1 | 15:18:38 +48′ | 40 Wrong Answer | 37ms 768 KiB | 首交 相似度 1.000 · +0/-0 行 | (首次提交本题) |
| 2 | 15:22:01 +52′ | 0 Wrong Answer | 29ms 768 KiB | 结构性改动 相似度 0.693 · +5/-11 行 | int n, k;→int n, k, i;→for (i = 0; i <= n; i += 4) {→cout << "1 3 2 4 ";删除 exit(0); |
| 3 | 15:27:59 +57′ | 0 Wrong Answer | 32ms 512 KiB | 局部修补 相似度 0.941 · +3/-5 行 | int n, k, i;→int n, k, i, cnt, a[50005];for (i = 0; i <= n; i += 4) {→for (i = 0; i <= n - k; i += 4) {for (; i <= n; ++i) →for (; i <= n; ++i) cout << "4 ";删除 cout << "4 "; |
| 4 | 15:31:02 +61′ | 70 Wrong Answer | 41ms 768 KiB | 局部修补 相似度 0.852 · +4/-3 行 | int n, k, i, cnt, a[50→int n, k, i, cnt, a[5] = {0, 1, 3, 2, 4};for (i = →for (i = 1; i <= n - k; ++i) {cout << →cout << a[(i % 4) == 0 ? 4 : i % 4] << ' ';缩进 |
| 5 | 15:32:23 +62′ | 70 Wrong Answer | 39ms 768 KiB | 结构性改动 相似度 0.797 · +7/-0 行 | 新增 if (n - k - 2 == 0) {新增 for (int i = 1; i <= n; ++i) cout << 0 << ' ';新增 exit(0);新增 } else if (n - k - 2 < 0) { |
| 6 | 15:36:25 +66′ | 45 Wrong Answer | 40ms 768 KiB | 局部修补 相似度 0.994 · +3/-3 行 | 缩进 cout << -1;缩进 exit(0);for (; i <= n; ++i) cout << "→for (; i <= n; ++i) cout << "-1 "; |
| 7 | 15:39:49 +69′ | 100 Accepted | 43ms 768 KiB | 结构性改动 相似度 0.724 · +10/-2 行 | 新增 int lst = 2, ll = 4;新增 lst = a[(i % 4) == 0 ? 4 : i % 4];新增 if (i < n - k) ll = a[(i % 4) == 0 ? 4 : i % 4];for (; i <= n; ++i) →for (; i <= n; ++i) { |
| # | 时刻 | 判定 | 用时/内存 | 改动幅度 | 细粒度差异 |
|---|---|---|---|---|---|
| 1 | 19:10:24 +280′ | 0 Wrong Answer | 428ms 3.9 MiB | 首交 相似度 1.000 · +0/-0 行 | (首次提交本题) |
| # | 时刻 | 判定 | 用时/内存 | 改动幅度 | 细粒度差异 |
|---|---|---|---|---|---|
| 1 | 16:44:11 +134′ | 20 Wrong Answer | 105ms 852 KiB | 首交 相似度 1.000 · +0/-0 行 | (首次提交本题) |
| 2 | 16:50:56 +140′ | 20 Runtime Error | 1391ms 251.5 MiB | 重写 相似度 0.470 · +35/-1 行 | int n, a[N], b[N], ans;→int n, a[N], b[N], ans, ncnt;新增 void dfs(int u, int cnt) {新增 ncnt = max(ncnt, cnt);新增 if (u == 1) { |
| 3 | 16:51:24 +141′ | 20 Runtime Error | 1282ms 250.9 MiB | 局部修补 相似度 0.998 · +1/-1 行 | --b[u];→--b[u - 1]; |
| 4 | 16:51:54 +141′ | 20 Runtime Error | 1296ms 251 MiB | 局部修补 相似度 0.878 · +2/-0 行 | 新增 ++b[u];新增 ++b[u - 1]; |
| 5 | 16:53:15 +143′ | 20 Runtime Error | 1307ms 250.9 MiB | 局部修补 相似度 0.805 · +2/-4 行 | 删除 ++b[u];--b[u→--b[u];删除 ++b[u - 1];→for (int i = 1; i < n; ++i) b[i] = a[i]; |
| # | 时刻 | 判定 | 用时/内存 | 改动幅度 | 细粒度差异 |
|---|---|---|---|---|---|
| 1 | 16:56:28 +146′ | 0 Time Exceeded | ≥59952ms ≥796 KiB | 首交 相似度 1.000 · +0/-0 行 | (首次提交本题) |
| # | 时刻 | 判定 | 用时/内存 | 改动幅度 | 细粒度差异 |
|---|---|---|---|---|---|
| 1 | 16:08:30 +98′ | 10 Wrong Answer | 153ms 8.2 MiB | 首交 相似度 1.000 · +0/-0 行 | (首次提交本题) |
| 2 | 16:09:03 +99′ | 0 Wrong Answer | 165ms 8.2 MiB | 结构性改动 相似度 0.709 · +5/-7 行 | #define →#define int long longint n, a[10000005], dif[10000005], mx→int n, a[10000005], dif[10000005], mx;in→signed main() {删除 a[i] = mx - a[i]; |
| 3 | 16:09:32 +99′ | 100 Accepted | 2733ms 139.9 MiB | 局部修补 相似度 0.880 · +5/-3 行 | int n, a[10000005], dif[10000005], mx;→int n, a[10000005], dif[10000005], mx, ans;新增 a[i] = mx - a[i];新增 dif[i] = a[i] - a[i - 1];新增 if (dif[i] >= 0) ans += dif[i]; |
| # | 时刻 | 判定 | 用时/内存 | 改动幅度 | 细粒度差异 |
|---|---|---|---|---|---|
| 1 | 15:03:42 +33′ | 0 Wrong Answer | 37ms 764 KiB | 首交 相似度 1.000 · +0/-0 行 | (首次提交本题) |
| 2 | 15:08:50 +38′ | 0 Wrong Answer | 29ms 768 KiB | 局部修补 相似度 0.888 · +8/-8 行 | int i;→// int i;→// for (i = 1; i + 3 <= n - k; i += 4) {→// cout << "1 3 2 4 ";→// } |
| 3 | 15:13:40 +43′ | 45 Wrong Answer | 35ms 512 KiB | 局部修补 相似度 0.892 · +6/-8 行 | →int i;→for (i = 1; i + 3 <= n - k; i += 4) {→cout << "1 3 2 4 ";→} |
| 4 | 15:18:28 +48′ | 0 Compile Error | - - | 局部修补 相似度 0.839 · +5/-3 行 | 新增 int a[4] = {4, 1, 3, 2};for (i = 1; i →for (i = 1; i <= n - k; i++) {cout << →cout << a[i % 4] << ' ';→int k = a[(i - 1) % 4]; |
| 5 | 15:20:02 +50′ | 100 Accepted | 42ms 768 KiB | 原样重交 相似度 1.000 · +0/-0 行 | 与上一发逐字节相同(MD5 一致) |
| # | 时刻 | 判定 | 用时/内存 | 改动幅度 | 细粒度差异 |
|---|---|---|---|---|---|
| 1 | 16:35:12 +125′ | 0 Time Exceeded | ≥20558ms ≥512 KiB | 首交 相似度 1.000 · +0/-0 行 | (首次提交本题) |
| 2 | 16:47:30 +137′ | 0 Wrong Answer | 1276ms 3.9 MiB | 局部修补 相似度 0.939 · +7/-5 行 | 新增 x++;新增 x++;y = ((y - t) % (2 * n) + 2 * n) % 2 * n;→y = ((y - t) % (2 * n) + 2 * n) % (2 * n);update(t1, 2 * n - y→update(t1, 2 * n - y, z); |
| 3 | 16:55:33 +145′ | 0 Wrong Answer | 1348ms 6.7 MiB | 结构性改动 相似度 0.720 · +11/-10 行 | int n, q, t1[400005], t2[400005];→int n, q, t1[400005], t2[400005], p;for (int i = x; i <= →for (int i = x; i <= p + 1; i += lowbit(i)) t[i] += k;新增 p = 2 * (n - 1);y = ((y - t) % →y = ((y - t) % p + p) % p; |
| 4 | 16:56:40 +146′ | 0 Wrong Answer | 1291ms 3.8 MiB | 局部修补 相似度 0.821 · +19/-14 行 | int n, q, t1[400005], t2[400005]→int n, q, t1[400005], t2[400005];int lowbit(int x) {→int lowbit(int x) { return x & -x; }删除 return x & -x;删除 } |
| # | 时刻 | 判定 | 用时/内存 | 改动幅度 | 细粒度差异 |
|---|---|---|---|---|---|
| 1 | 16:53:28 +143′ | 0 Wrong Answer | 106ms 888 KiB | 首交 相似度 1.000 · +0/-0 行 | (首次提交本题) |
| 2 | 16:53:44 +143′ | 0 Wrong Answer | 99ms 1 MiB | 局部修补 相似度 0.986 · +1/-1 行 | cout << m→cout << max(a[1], a[2]); |
| 3 | 16:54:15 +144′ | 20 Wrong Answer | 106ms 868 KiB | 局部修补 相似度 0.907 · +1/-1 行 | cout << max(a[1], a[2]);→cout << max(a[1] + min(a[1], a[2]), a[2] + min(a[1], a[2])); |
| # | 时刻 | 判定 | 用时/内存 | 改动幅度 | 细粒度差异 |
|---|---|---|---|---|---|
| 1 | 14:57:08 +27′ | 0 Wrong Answer | 174ms 4.1 MiB | 首交 相似度 1.000 · +0/-0 行 | (首次提交本题) |
| 2 | 15:02:27 +32′ | 0 Wrong Answer | 169ms 4.3 MiB | 局部修补 相似度 0.866 · +4/-3 行 | for(int i=n;i→for(int i=1;i<=n;i++)→for(int i=2;i<=n;i++) {→if(a[i]-a[i-1]>0)新增 ans+=a[i]-a[i-1]; |
| 3 | 16:01:05 +91′ | 0 Format Error | - - | 局部修补 相似度 0.841 · +7/-10 行 | int n,a[10000005],→int n,a[10000005],ans;删除 int _abs(int x) {删除 return x<0? -x:x;删除 } |
| 4 | 16:01:17 +91′ | 0 Format Error | - - | 原样重交 相似度 1.000 · +0/-0 行 | 与上一发逐字节相同(MD5 一致) |
| 5 | 16:01:41 +91′ | 0 Format Error | - - | 原样重交 相似度 1.000 · +0/-0 行 | 与上一发逐字节相同(MD5 一致) |
| 6 | 16:03:48 +93′ | 0 Wrong Answer | 173ms 4.3 MiB | 局部修补 相似度 0.936 · +3/-5 行 | for(int i=→for(int i=0;i<n;i++) {if(i>→if(a[i]>0)a→ans+=a[i]-a[i+1];删除 if(a[i]>0) |
| 7 | 16:04:58 +94′ | 10 Wrong Answer | 171ms 4.2 MiB | 局部修补 相似度 0.992 · +1/-1 行 | if(a[i]>0)→if(a[i]-a[i+1]>0) |
| 8 | 16:07:22 +97′ | 10 Wrong Answer | 177ms 4.4 MiB | 局部修补 相似度 0.991 · +2/-2 行 | a[0]=max(a[0],a[i]);→a[0]=a[n+1]=max(a[0],a[i]);for(int i=0;i<n;i++) {→for(int i=0;i<=n;i++) { |
| 9 | 16:08:43 +98′ | 100 Accepted | 2851ms 70.2 MiB | 局部修补 相似度 0.991 · +4/-3 行 | int n→int n;新增 ll a[10000005],ans;scanf("%d",&a[i]);→scanf("%lld",&a[i]);printf("%d",ans);→printf("%lld",ans); |
| # | 时刻 | 判定 | 用时/内存 | 改动幅度 | 细粒度差异 |
|---|---|---|---|---|---|
| 1 | 15:13:04 +43′ | 5 Wrong Answer | 32ms 512 KiB | 首交 相似度 1.000 · +0/-0 行 | (首次提交本题) |
| 2 | 15:22:40 +52′ | 0 Wrong Answer | 36ms 768 KiB | 局部修补 相似度 0.933 · +9/-7 行 | int n,k;→int n,k,i;for(→for(i=1;i<=n;i+=4)新增 printf("1 3 2 4 ");新增 i-=k; |
| 3 | 15:26:40 +56′ | 100 Accepted | 36ms 760 KiB | 局部修补 相似度 0.854 · +12/-4 行 | int n,k→int n,k;for(i=1;i<=n;i+→for(int i=1;i<=n-k;i++) {→if((i-1)%4==0)i→printf("1 "); |
| # | 时刻 | 判定 | 用时/内存 | 改动幅度 | 细粒度差异 |
|---|---|---|---|---|---|
| 1 | 16:32:36 +122′ | 0 Runtime Error | 4ms 512 KiB | 首交 相似度 1.000 · +0/-0 行 | (首次提交本题) |
| # | 时刻 | 判定 | 用时/内存 | 改动幅度 | 细粒度差异 |
|---|---|---|---|---|---|
| 1 | 16:57:50 +147′ | 20 Wrong Answer | 44ms 1.3 MiB | 首交 相似度 1.000 · +0/-0 行 | (首次提交本题) |
| # | 时刻 | 判定 | 用时/内存 | 改动幅度 | 细粒度差异 |
|---|---|---|---|---|---|
| 1 | 14:57:33 +27′ | 0 Wrong Answer | 37ms 768 KiB | 首交 相似度 1.000 · +0/-0 行 | (首次提交本题) |
| 2 | 15:02:58 +32′ | 0 Wrong Answer | 32ms 768 KiB | 结构性改动 相似度 0.778 · +4/-2 行 | if(i→if(i%4==0) cout<<"1 ";else cout<<→else if(i%4==1) cout<<"3 ";新增 else if(i%4==2) cout<<"2 ";新增 else cout<<"4 "; |
| 3 | 15:15:08 +45′ | 0 Compile Error | - - | 局部修补 相似度 0.912 · +2/-1 行 | for(int i=1;i<=n;i++) cout<<→for(int i=1;i<=n;i++) cout<<i<<' ';缩进 |
| 4 | 15:19:48 +49′ | 100 Accepted | 40ms 768 KiB | 重写 相似度 0.318 · +4/-6 行 | 删除 #include <cstdio>新增 int a[5]={1,3,2,4};→cout<<a[i%4]<<' ';删除 else if(i%4==1) cout<<"3 "; |
| # | 时刻 | 判定 | 用时/内存 | 改动幅度 | 细粒度差异 |
|---|---|---|---|---|---|
| 1 | 15:14:44 +44′ | 0 Wrong Answer | 43ms 768 KiB | 首交 相似度 1.000 · +0/-0 行 | (首次提交本题) |
| 2 | 15:15:54 +45′ | 0 Compile Error | - - | 局部修补 相似度 0.998 · +1/-1 行 | }for(int i=k;i<→}for(int i=k;i<n;i++){ |
| 3 | 15:16:54 +46′ | 0 Compile Error | - - | 原样重交 相似度 1.000 · +0/-0 行 | 与上一发逐字节相同(MD5 一致) |
| 4 | 15:18:26 +48′ | 0 Compile Error | - - | 原样重交 相似度 1.000 · +0/-0 行 | 与上一发逐字节相同(MD5 一致) |
| 5 | 15:20:25 +50′ | 100 Accepted | 46ms 800 KiB | 原样重交 相似度 1.000 · +0/-0 行 | 与上一发逐字节相同(MD5 一致) |
| # | 时刻 | 判定 | 用时/内存 | 改动幅度 | 细粒度差异 |
|---|---|---|---|---|---|
| 1 | 16:55:02 +145′ | 0 Wrong Answer | 14ms 512 KiB | 首交 相似度 1.000 · +0/-0 行 | (首次提交本题) |
| # | 时刻 | 判定 | 用时/内存 | 改动幅度 | 细粒度差异 |
|---|---|---|---|---|---|
| 1 | 14:46:54 +16′ | 0 Wrong Answer | 489ms 15.7 MiB | 首交 相似度 1.000 · +0/-0 行 | (首次提交本题) |
| 2 | 14:51:34 +21′ | 0 Wrong Answer | 484ms 15.8 MiB | 结构性改动 相似度 0.662 · +11/-10 行 | int n;→int n , m = 1;ll mx , →ll mx , cnt;ll a[N] , b[N];→ll a[N] , b[N] , ans[N];int i = 1;→for (int i = 1; i <= n; i ++) { |
| 3 | 14:52:47 +22′ | 0 Wrong Answer | 166ms 15.9 MiB | 局部修补 相似度 0.910 · +3/-0 行 | 新增 ios_base::sync_with_stdio(0);新增 cin.tie(nullptr);新增 cout.tie(nullptr); |
| 4 | 15:01:00 +31′ | 0 Wrong Answer | 177ms 15.8 MiB | 局部修补 相似度 0.994 · +1/-1 行 | b[i] = mx - a[i];→b[i] = abs(mx - a[i]); |
| # | 时刻 | 判定 | 用时/内存 | 改动幅度 | 细粒度差异 |
|---|---|---|---|---|---|
| 1 | 15:34:24 +64′ | 5 Wrong Answer | 40ms 768 KiB | 首交 相似度 1.000 · +0/-0 行 | (首次提交本题) |
| 2 | 15:56:26 +86′ | 95 Wrong Answer | 40ms 768 KiB | 结构性改动 相似度 0.630 · +11/-3 行 | int n , k , i = 1;→int n , k , i = 1 , j;新增 int a[5] = {1 , 3 , 2 , 4};→while (i - 2 <= n - k - 2) {cout << i - →cout << a[i % 4 - 1] << ' '; |
把 116 次提交按"改动幅度"归类之后,这 9 个人的思维轨迹分成三种典型形态,各自的问题完全不同:
| 类型 | 特征 | 典型行为 | 代表人物 |
|---|---|---|---|
| 换模型型 | 卡住 → 推倒重来 → 换一个模型 | 相似度会掉到 0.55 以下(出现"重写"),换个模型往往一次就过 | 张恩博、钟如杉、(后期的)Vicco_Li、Guagua111(T2/T3) |
| 磨参数型 | 模型已经对了,但不会定位失败原因 | 连续多发的相似度都在 0.95 以上,只在数值/边界/类型上打转 | crkr(T1 磨了 71 分钟,最后发现是 int)、Guagua111(T1 三发)、NaiLong |
| 增量推广型最危险 | 模型是错的,但他不是去修 bug,而是把错模型包装得更"通用" | 第 2 发的改动看起来更有道理,其实离真相更远 | 徐浩然(T1)、Vicco_Li(T1 前 13 发) |
另一个共性:全组的思维起点几乎一样——T1 都从"分段/分块"起步,T2 都从样例给的 1 3 2 4 起步,T4 都从 a₁+a₂ 起步。这说明他们有共同的训练痕迹;但也正因为同源,共同的错误也同源(同一道题上 4 个人不约而同地交了 a1+a2、2 个人不约而同地栽在 int 溢出)。
cin 换成 scanf、加了个换行 —— 模型没动,两次仍然 0 分diff[n+1]=maxn-arr[n] 并把循环跑到 n+1;耗时从 184ms 跳到 2965ms(数组换成 ll)cout<<1e9——1e9 是 double 字面量,输出成 1e+09,直接 0 分n-k-1、尾部下标从 0 起<<b<<n<3、k==0 两个边界分支,中间还反复调空格Σ|相邻差| → arr[2] → 2·min(a1,a2) → a1+a2(这一发拿到 20 分,是白送的 n=3 子任务)a[i]、偶数取 a[i]-1 累加 —— 这就是正解的核心,但最后多写了个 +1,0 分ans+1 改成 ans,仍是 0 分,此后再没提交。距结束还有 22 分钟max 就把本段最大缺口累加一次」——6 发全部在这一个模型里换哨兵(-1→-1e9)、换符号(max/min)、把 int 改 long long、末尾补 a[n+1]。相似度全部 >0.97,模型一次没换-1e181e18 + min),仍在同一个模型里maxv-a[1],其后累加下降量」——一次就过,耗时 2634ms/70MiB3 + (k−1) 个 2 + 0 + 一串 2」——靠数值构造,能拿部分分1 3 2 4 循环 + 尾部复制n-k-2==0 与 <0 两个分支-1,分数反而掉了lst±1:按倒数第二个数与最后一个数的大小关系选方向,保证接缝处的三元组必坏——全组对"接缝"理解最深的一份n==3 分支输出 a1+a2(白送分)--b[u] 写成 --b[u-1],然后加了又删 ++b[u]),内存 251MBi+4」cout<<-1;——全组唯一一个用"最小提交"去试探判题行为的人a[4]={4,1,3,2} 查表 + 记录末值复制(判题机报 CE)ans 是 int → 溢出#define int long long 时,手一抖把整个计算循环删空了 → 0 分(y±t) + 镜像插入到 BIT」已经对了,但 BIT 从 0 下标起步,lowbit(0)=0 → 死循环 TLE2np=2(n-1) —— 这一步直接对应"走廊两端是 0 和 N−1 的折返"f(x)(取模 + 翻折),并把镜像也过一遍 f —— 离正解只差"查询区间跨 0 时拆成两段"min(a1,a2) → max(a1,a2) → a1+min(a1,a2) 之间摇摆三发拿 20 分ans 是 int → 溢出a[n+1]、改判断条件),拿到 10 分int a[] 换成 ll a[]。相似度 0.93,其余全是环境故障i-=k 后查表」n-k1e8 把 W/E 坐标分开 + 镜像查询)其实已接近正解,但 scanf 少读一个参数 t,加上 2×100200005 个 long long ≈ 1.6GB 静态数组 → 4ms 就 RE。此后再没提交过 T3printf("%lld", a[1]+a[2]) → 20 分收工k==0 与 k==n-2 两种极端情况(把子任务当全题交)k==0 分支改成 1 3 2 4 循环1 3 2 4——第一发代码就是对的cout<<n+6;——明确的放弃式提交b[i]=mx-a[i] 改成 abs(mx-a[i])——b 本来就非负,完全等价,什么也没改。之后放弃 T11 3 2 4 循环 + 余下直接输出 i-3a[] 循环 + j 记录末值复制——思路和其它 7 人完全一致且正确。败在实现:while(i<=n-k-3) 一次吐 4 个数,当 n-k 恰好是 4 的倍数时余数段被整段跳过,j 保持全局初值 0,尾部变成 03 1 2 → 2),这场名次会完全不同。7 名学生比赛当天共 94 次提交,另有 1 次赛后补题(带标记)。「赛中」列是距开赛(14:30)的分钟数。
| # | 时刻 | 赛中 | 选手 | 题 | 判定 | 这一发在干什么 |
|---|---|---|---|---|---|---|
| 1 | 14:46:45 | +16′ | 张恩博 | T1 | 0 Wrong Answer | 开局就交:把「还差多少层」按 0 切成两段,答案取两段各自最大值之和 —— 错模型(峰一多就漏算) |
| 2 | 14:52:13 | +22′ | 张恩博 | T1 | 0 Wrong Answer | 把 cin 换 scanf、ans 显式初始化,逻辑一行没动 |
| 3 | 14:55:00 | +25′ | 张恩博 | T1 | 0 Wrong Answer | 只加了个换行,继续没碰逻辑 |
| 4 | 15:19:52 | +49′ | 张恩博 | T2 | 0 Wrong Answer | 转 T2:1/50001/2 交替铺,尾部 cout<<1e9 —— 1e9 是 double 字面量,输出成 1e+09,直接 0 分 |
| 5 | 15:20:15 | +50′ | 张恩博 | T2 | 0 Wrong Answer | ★ 与上一发逐字节相同,原样重交 |
| 6 | 15:21:18 | +51′ | 张恩博 | T2 | 0 Wrong Answer | 把 1e9 写成 1000000000 |
| 7 | 15:24:46 | +54′ | 张恩博 | T2 | 0 Wrong Answer | 改成 1000000000-1(在猜数值上限) |
| 8 | 15:26:38 | +56′ | 张恩博 | T2 | 65 Wrong Answer | 循环边界改 n-k-1、尾部下标从 0 起 —— 第一次拿到分,65 |
| 9 | 15:29:03 | +59′ | 张恩博 | T2 | 95 Wrong Answer | 尾部补一个 <<b<< —— 95 |
| 10 | 15:32:20 | +62′ | 张恩博 | T2 | 95 Wrong Answer | 补 if(n<3) 输出 -1 的边界分支 |
| 11 | 15:47:33 | +77′ | 张恩博 | T2 | 95 Wrong Answer | 补 if(k==0) 分支,但尾部多打了一个数 |
| 12 | 15:47:55 | +77′ | 张恩博 | T2 | 95 Wrong Answer | 把多余空格去掉再交一次 |
| 13 | 15:50:16 | +80′ | 张恩博 | T2 | 100 Accepted | 去掉多余输出 → AC(T2 共 10 发、30 分钟) |
| 14 | 15:54:28 | +84′ | 张恩博 | T1 | 0 Wrong Answer | 回 T1:只把换行去掉 |
| 15 | 16:15:56 | +105′ | 张恩博 | T1 | 0 Wrong Answer | 推倒重来,换成「差分取正和」的正确思路,但漏了首元素和尾元素 |
| 16 | 16:19:01 | +109′ | 张恩博 | T1 | 100 Accepted | 补上 diff[n+1]=maxn-arr[n] → AC(T1 共 6 发、跨 92 分钟) |
| 17 | 16:30:16 | +120′ | 张恩博 | T4 | 0 Wrong Answer | T4 首交:Σ|相邻差| |
| 18 | 16:30:31 | +120′ | 张恩博 | T4 | 0 Wrong Answer | 16 秒后重交一发(同样思路) |
| 19 | 16:31:55 | +121′ | 张恩博 | T4 | 0 Wrong Answer | 输出换成 arr[2] |
| 20 | 16:32:40 | +122′ | 张恩博 | T4 | 0 Wrong Answer | 换成 2*min(arr[2],arr[3]) |
| 21 | 16:32:56 | +122′ | 张恩博 | T4 | 0 Wrong Answer | 只把 2 改成 2LL(改类型) |
| 22 | 16:33:44 | +123′ | 张恩博 | T4 | 20 Wrong Answer | 换成 arr[2]+arr[3] → 20 分 |
| 23 | 16:36:42 | +126′ | 张恩博 | T4 | 0 Wrong Answer | ★ 转向奇偶性:奇数取 a[i]、偶数取 a[i]-1,然后 ans+1 |
| 24 | 16:38:41 | +128′ | 张恩博 | T4 | 0 Wrong Answer | 去掉 +1 → 仍是 0。16:38 停手,此时距比赛结束还有 22 分钟 |
| 25 | 14:44:30 | +14′ | Vicco_Li | T1 | 0 Wrong Answer | T1 首交:「遇到 max 就把当前段的最大缺口累加一次」的段模型(错) |
| 26 | 14:48:45 | +18′ | Vicco_Li | T1 | 0 Wrong Answer | 哨兵 -1e9 + 加条件 a[i-1]!=maxv,同一模型 |
| 27 | 14:49:48 | +19′ | Vicco_Li | T1 | 0 Wrong Answer | 把 n 从 int 改成 long long(与本题错误无关) |
| 28 | 14:50:51 | +20′ | Vicco_Li | T1 | 0 Wrong Answer | 改成累加 nwmaxv、缺口改存 maxv-a[i],继续试参数 |
| 29 | 14:53:05 | +23′ | Vicco_Li | T1 | 0 Wrong Answer | 把 max 换 min、哨兵换 1e9(方向反了) |
| 30 | 14:57:44 | +27′ | Vicco_Li | T1 | 0 Wrong Answer | 末尾补 a[n+1]=maxv、重写循环 —— 同一模型第 6 次,仍 0 分 |
| 31 | 15:18:38 | +48′ | Vicco_Li | T2 | 40 Wrong Answer | 转 T2:首交,构造「3 + (k-1)个2 + 0 + 一串2」→ 40 分 |
| 32 | 15:22:01 | +52′ | Vicco_Li | T2 | 0 Wrong Answer | 换成 1 3 2 4 循环 → 0 |
| 33 | 15:27:59 | +57′ | Vicco_Li | T2 | 0 Wrong Answer | 边界改成 n-k → 0 |
| 34 | 15:31:02 | +61′ | Vicco_Li | T2 | 70 Wrong Answer | 改成 a[] 查表取值 → 70 |
| 35 | 15:32:23 | +62′ | Vicco_Li | T2 | 70 Wrong Answer | 补 n-k-2==0 与 <0 两个分支 → 70 |
| 36 | 15:36:25 | +66′ | Vicco_Li | T2 | 45 Wrong Answer | 尾部填 -1 → 45(更差,退回) |
| 37 | 15:39:49 | +69′ | Vicco_Li | T2 | 100 Accepted | 尾部改成 lst±1(按倒数第二个数与最后一个数的大小选方向,保证接口必坏)→ AC。T2 共 7 发、21 分钟 |
| 38 | 15:43:09 | +73′ | Vicco_Li | T1 | 0 Wrong Answer | 重开 T1:换哨兵 -1e18 |
| 39 | 15:48:43 | +78′ | Vicco_Li | T1 | 0 Wrong Answer | ★ 与上一发逐字节相同,原样重交 |
| 40 | 16:05:43 | +95′ | Vicco_Li | T1 | 0 Wrong Answer | ★ 与上一发逐字节相同,原样重交 |
| 41 | 16:09:01 | +99′ | Vicco_Li | T1 | 0 Wrong Answer | ★ 与上一发逐字节相同,原样重交(三连空转,共 21 分钟) |
| 42 | 16:19:45 | +109′ | Vicco_Li | T1 | 0 Wrong Answer | 再换哨兵方向(1e18/min) |
| 43 | 16:35:02 | +125′ | Vicco_Li | T1 | 100 Accepted | 彻底换成正解写法(逐位比较,首元素补 maxv-a[1])→ AC。T1 共 12 发、跨 110 分钟 |
| 44 | 16:44:11 | +134′ | Vicco_Li | T4 | 20 Wrong Answer | T4:只写 n==3 分支(a1+a2)→ 20 |
| 45 | 16:50:56 | +140′ | Vicco_Li | T4 | 20 Runtime Error | ★ 改交 DFS 回溯:在链上枚举所有走法求最长,模型其实是对的,但指数级、吃到 251MB → RE |
| 46 | 16:51:24 | +141′ | Vicco_Li | T4 | 20 Runtime Error | 修手误 --b[u] → --b[u-1] |
| 47 | 16:51:54 | +141′ | Vicco_Li | T4 | 20 Runtime Error | 补上回溯恢复 ++b[u] |
| 48 | 16:53:15 | +143′ | Vicco_Li | T4 | 20 Runtime Error | 又把回溯恢复删掉、memcpy 换手写循环 |
| 49 | 16:56:28 | +146′ | Vicco_Li | T5 | 0 Time Exceeded | T5 交一发 O(len²) 枚举 gcd → TLE;赛后 19:10 又补了一发 T3,仍 WA |
| 50 | 19:10:24 | +280′ 赛后补题 | Vicco_Li | T3 | 0 Wrong Answer | |
| 51 | 15:03:42 | +33′ | Guagua111 | T2 | 0 Wrong Answer | T2 首交:1 3 2 4 循环 + 尾部 i+4(越界构造) |
| 52 | 15:08:50 | +38′ | Guagua111 | T2 | 0 Wrong Answer | ★ 探针提交:把正式代码整段注释掉,只交一句 cout<<-1; |
| 53 | 15:13:40 | +43′ | Guagua111 | T2 | 45 Wrong Answer | 恢复正式代码,尾部统一填 4 → 45 |
| 54 | 15:18:28 | +48′ | Guagua111 | T2 | 0 Compile Error | 重写成 a[4]={4,1,3,2} + 末值复制 —— 判题机报 Compile Error |
| 55 | 15:20:02 | +50′ | Guagua111 | T2 | 100 Accepted | ★ 与上一发完全相同,重交 → AC(那次 CE 是判题机侧的) |
| 56 | 16:08:30 | +98′ | Guagua111 | T1 | 10 Wrong Answer | T1 首交:思路完全正确,但 ans 是 int → 溢出,只拿 10 分 |
| 57 | 16:09:03 | +99′ | Guagua111 | T1 | 0 Wrong Answer | 加 #define int long long,但手抖把整个计算循环删空了 → 0 |
| 58 | 16:09:32 | +99′ | Guagua111 | T1 | 100 Accepted | 51 秒后补回循环 → AC |
| 59 | 16:35:12 | +125′ | Guagua111 | T3 | 0 Time Exceeded | T3 首交:BIT 从 0 下标起步 → lowbit(0)=0 死循环 TLE |
| 60 | 16:47:30 | +137′ | Guagua111 | T3 | 0 Wrong Answer | 下标统一 +1 起(死循环解掉),模数仍是 2n |
| 61 | 16:53:28 | +143′ | Guagua111 | T4 | 0 Wrong Answer | 模数换成 p=2(n-1)(关键一步),但区间没做折叠 |
| 62 | 16:53:44 | +143′ | Guagua111 | T4 | 0 Wrong Answer | 写出折叠函数 f(x)(取模+翻折+镜像)→ 仍 WA(离正解只差区间跨 0 的处理) |
| 63 | 16:54:15 | +144′ | Guagua111 | T4 | 20 Wrong Answer | T4:min(a1,a2) |
| 64 | 16:55:33 | +145′ | Guagua111 | T3 | 0 Wrong Answer | 改 max(a1,a2) |
| 65 | 16:56:40 | +146′ | Guagua111 | T3 | 0 Wrong Answer | 改成 max(a1+min(a1,a2), a2+min(a1,a2)),化简即 a1+a2 → 20 分,收工 |
| 66 | 14:57:08 | +27′ | crkr | T1 | 0 Wrong Answer | T1 首交:套刷题模板,从后往前差分取 |Δ| |
| 67 | 15:02:27 | +32′ | crkr | T1 | 0 Wrong Answer | 改成缺口数组取正差分和(思路已经对了)但 int 溢出 → 0 |
| 68 | 15:13:04 | +43′ | crkr | T2 | 5 Wrong Answer | T2 首交(该记录页无代码,判定 5 分) |
| 69 | 15:22:40 | +52′ | crkr | T2 | 0 Wrong Answer | T2 重写:1 3 2 4 循环 + i-=k 后查表 |
| 70 | 15:26:40 | +56′ | crkr | T2 | 100 Accepted | 循环拆两段、边界改 n-k → AC |
| 71 | 16:01:05 | +91′ | crkr | T1 | 0 Format Error | ★ 判题机报「题目配置错误。找不到输入文件 1.in。」—— 环境故障,白交 |
| 72 | 16:01:17 | +91′ | crkr | T1 | 0 Format Error | ★ 同上 |
| 73 | 16:01:41 | +91′ | crkr | T1 | 0 Format Error | ★ 同上(三连撞上环境故障) |
| 74 | 16:03:48 | +93′ | crkr | T1 | 0 Wrong Answer | 重写:首元素补 max,但循环写成 i<n 且条件写错 → 0 |
| 75 | 16:04:58 | +94′ | crkr | T1 | 10 Wrong Answer | 条件改成 a[i]-a[i+1]>0 → 10 |
| 76 | 16:07:22 | +97′ | crkr | T1 | 10 Wrong Answer | 补上 a[n+1](首尾都填 max)→ 10(还差类型) |
| 77 | 16:08:43 | +98′ | crkr | T1 | 100 Accepted | 把数组与 ans 从 int 换成 ll → AC。整场 T1 唯一的实质改动就是加宽类型 |
| 78 | 16:32:36 | +122′ | crkr | T3 | 0 Runtime Error | T3 唯一一发:2×1.6GB 静态数组 + scanf 少读一个 t → RE(4ms 就挂) |
| 79 | 16:57:50 | +147′ | crkr | T4 | 20 Wrong Answer | 收比赛前最后一发 T4:a[1]+a[2] → 20 分 |
| 80 | 14:57:33 | +27′ | 钟如杉 | T2 | 0 Wrong Answer | T2 首交:只处理 k==0 与 k==n-2 两种极端 |
| 81 | 15:02:58 | +32′ | 钟如杉 | T2 | 0 Wrong Answer | k==0 分支改成 1 3 2 4 循环 |
| 82 | 15:15:08 | +45′ | 钟如杉 | T2 | 0 Compile Error | ★ 判题机报 Compile Error(代码本身没问题,同一时间窗另有 4 人 CE) |
| 83 | 15:19:48 | +49′ | 钟如杉 | T2 | 100 Accepted | 直接换成最终正确形态:前 k+1 个同值 + 其余走 1 3 2 4 循环 → AC |
| 84 | 15:14:44 | +44′ | NaiLong | T2 | 0 Wrong Answer | T2 首交(记录页只显示判题机提示,无代码) |
| 85 | 15:15:54 | +45′ | NaiLong | T2 | 0 Compile Error | ★ 与后一发逐字节相同 → Compile Error |
| 86 | 15:16:54 | +46′ | NaiLong | T2 | 0 Compile Error | 手工状态机推 1 3 2 4,尾部复制末值 |
| 87 | 15:18:26 | +48′ | NaiLong | T2 | 0 Compile Error | ★ 与上一发逐字节相同 → 又是 Compile Error |
| 88 | 15:20:25 | +50′ | NaiLong | T2 | 100 Accepted | ★ 同一份代码第 3 次提交 → AC。代码从头到尾没问题,是判题机编译服务不稳定 |
| 89 | 16:55:02 | +145′ | NaiLong | T4 | 0 Wrong Answer | T4:cout<<n+6; —— 放弃式提交 |
| 90 | 14:46:54 | +16′ | 徐浩然 | T1 | 0 Wrong Answer | 全场第一发(14:46:54):按 0 切成两段,答案取两段最大值之和 |
| 91 | 14:51:34 | +21′ | 徐浩然 | T1 | 0 Wrong Answer | 把两段推广成 m 段:遇 0 开新段、段内取最大、再求和 —— 仍是同一个错模型 |
| 92 | 14:52:47 | +22′ | 徐浩然 | T1 | 0 Wrong Answer | 只加了快读快写,逻辑没动 |
| 93 | 15:01:00 | +31′ | 徐浩然 | T1 | 0 Wrong Answer | 把 b[i]=mx-a[i] 改成 abs(mx-a[i])(b 本来就非负,无意义)→ 之后放弃 T1 |
| 94 | 15:34:24 | +64′ | 徐浩然 | T2 | 5 Wrong Answer | T2 首交:1 3 2 4 循环、余下直接输出 i-3 → 5 分 |
| 95 | 15:56:26 | +86′ | 徐浩然 | T2 | 95 Wrong Answer | 重写成 a[] 循环 + j 记录末值复制 → 95 分(余数段被 4 整除时整段跳过) |
题意:一排 n 个格子,第 i 个格子已经堆了 aᵢ 层人。每次可以选一段连续区间整体 +1, 问最少多少次操作能让所有格子一样高(显然要和最高的那个一样)。
正解骨架:把「还差多少层」记作轮廓 b[i] = max − a[i] ≥ 0,
一次操作等价于在轮廓上放一条高度 1 的水平线段,于是答案就是轮廓的「上升量之和」:
答案 = Σ max(0, b[i] − b[i−1]) (b[0] = 0)
= (max − a[1]) + Σ max(0, a[i−1] − a[i])
数据范围:n ≤ 10⁷,aᵢ ≤ 10⁹ —— 答案可达 10¹⁶,必须开 64 位。 子任务:n≤10 得 10 分、n≤10³ 得 20 分、n≤10⁵ 得 30 分、n≤10⁷ 得 40 分。
这次踩的坑:两人拿到「逻辑正确但 ans 是 int」的 10 分;
一个人错在模型本身(把答案当成「按 0 切段后每段最大值之和」,多峰时漏算)。
题意:输出一个长度 n、值在 [0,10⁹] 的整数数列,使 n−2 个连续三元组中恰好 n−k−2 个是 「凹凸三元组」(三个数两两不等且中间那个最大或最小);无解输出 −1。
正解骨架:先把前 n−k 个位置铺成完美凹凸序列 1,3,2,4,1,3,2,4,…
(相邻差的符号严格交替,每个三元组都合法),再让尾部 k 个位置「变平」(等于前一个值)。
这样只有「交替段与平段的接缝」那一个三元组报废,其余 k−1 个坏三元组落在平段内部,坏数恰好 = k。
注意:题目里的 −1 分支在 0 ≤ k ≤ n−2 范围内不可达(k=0 用交替序列,k=n−2 用全等序列), 是本题唯一的干扰项。
这次踩的坑:8 人交了 37 发,分数是「调」出来的;cout<<1e9 会输出 1e+09;
一个人卡在「每 4 个一次性输出」导致余数段被跳过。
题意:0..N−1 号教室的走廊,学员「能走则走、不能走则原地掉头」。
指令 W t y z(时刻 t 从 y 向西放 z 人)、E t y z(向东)、Q t y z
(问时刻 t 教室 [y,z) 内总人数)。t 单调递增。
正解骨架(三步,缺一不可):
fold(x) = r ≤ N−1 ? r : M−r
(r = x mod M)。则西行学员在时刻 t 的位置 = fold((y₀+t₀) − t),东行 = fold((y₀−t₀) + t)。y₀+t₀,东行存 y₀−t₀),
查询时用 [l±t, r±t) 平移区间,用两棵树状数组分别维护。res 和 M−res 两处
(res ∈ {0, N−1} 只插一次,避免转点重复计数),查询就退化成普通区间查询。数据范围:N ≤ 2×10⁵,Q ≤ 8×10⁴,t ≤ 10⁸。这次踩的坑:树状数组从 0 下标起步导致
lowbit(0)=0 死循环;模数写成 2n(应为 2(N−1));
东西方向的键符号写反;静态数组开了 1.6GB。
题意:n 个岛排成一条链,第 i 座桥最多通行 aᵢ 次。可以从任意岛出发来回走, 求最多能通过多少次桥。
正解骨架:把一次行走看成链上的游走,则——起点 s 到终点 t 之间的桥一定被走奇数次, 其余被走偶数次;因此路上的桥取「≤aᵢ 的最大奇数」,路外的桥取「≤aᵢ 的最大偶数」, 再保证被使用的桥连成一段区间即可。
为什么 n=3 时答案恰好是 a₁+a₂:两条桥无论奇偶怎么搭配,总能凑出「一奇一偶」的分配 (一奇一偶、两奇、两偶三种情况都是 a₁+a₂ 最大),所以 20% 的子任务可以直接白拿。
这次踩的坑:4 人拿到 20 分后就停手,没有人把这条路走到「奇偶性分类」; 另有一人改写成 DFS 枚举所有走法(模型对、复杂度错),4 发全部 RE。
| 时刻 | 选手 | 题 | 判定 | 说明 |
|---|---|---|---|---|
| 15:15:08 | 钟如杉 | T2 | Compile Error | 代码本身没问题;同一窗口另有 4 次 CE |
| 15:15:54 / 15:16:54 / 15:18:26 | NaiLong | T2 | CE ×3 | 连续 3 发提交逐字节相同的代码,第 3 次就 AC |
| 15:18:28 | Guagua111 | T2 | Compile Error | 2 分钟后同一份代码 AC |
| 16:01:05 / 16:01:17 / 16:01:41 | crkr | T1 | Format Error ×3 | 「题目配置错误。找不到输入文件 1.in。」 |
| 项目 | 说明 |
|---|---|
| 统计范围 | 7 名参赛学生:比赛当天 94 次提交 + 赛后补题 1 次(Vicco_Li 于 19:10 又交了一发 T3)。 |
| 「提交次数」 | 包含判题机故障导致的失败提交;做「提交效率」分析时建议剔除附录 A 里的 8 次。 |
| 「改动幅度」 | 同一名选手同一道题,本次提交与上一次提交的代码相似度(去掉全部空白后做字符级比对,1.000 表示完全相同或仅空白差异)。 |
| 「改动类型」 | 逐字节相同 = 原样重交;仅空白不同 = 仅空白/缩进;相似度 ≥0.8 = 局部修补;0.55–0.8 = 结构性改动;<0.55 = 重写。 |
| 「语义标签」 | 对变更片段做正则归类:类型 / 常量 / 比较边界 / 模运算 / 输出 / 下标 / 控制流。 |
| 数据来源 | 比赛成绩表、题目页与提交记录页;所有代码均在本地用 g++ 重新编译并对拍验证过。 |