CSP-S 2024 游记 / 游寄
Day
中午
地点:机房。
新的赛季从初赛开始。
说实话,打心底没重视初赛。中午在机房听说早上 J 组送分送到家了,水到飞起。考后第一时间 QQ 群就传出来的偷拍版真题?某机构泄题的?重生之监考老师是我宿管?罚坐之考场上偷拍监考老师发呆?……没啥波澜,不做评价。
下午
地点:考场,和去年同一个学校。
又在监考老师面前贴脸?下午 S 组也很简单,没有一题是蒙的。完形填空
其他没什么印象,感觉和之前做过的题完全不一样,太水了。
归程
地点:大巴。
校对了一下感觉良好。差一点就 AK 了,可惜最后一道选择题计数少数了一个(雾)。但凡
还好总算稳过初赛了。没啥好炫耀的,毕竟这么简单嘛。不完而美?
Day
早上
地点:教室、机房。
前一天晚上问了别的同学家长,说要
到了机房。没人???吓得我赶紧把手机装上电话卡,正想打电话确认一下,是不是他们在我早读时,丢下我出发了(独孤月代入感),冲进来一只猫,还质问我为什么这么早来……晕,合着是我最早到的。
毕竟晚上、明天还有时间,早上不打算复习。搞了一会 Github 的学生认证,发现手头的资料都没有注明入学时间,也就放弃了。
中午、下午
地点:大巴。
有人身份证忘带了?幸好市民卡及时送到了。第一次看到知临新校,接上了霸气的帝王蟹。
路上和小河长坐一起。没啥事干,就糊里糊涂到了酒店。
晚上
地点:酒店、饭店。
前台搞入住搞了一会。之前说和 CPP 睡的,其实是和线段树大哥一个房间。一个房间到房间放了东西就准备吃饭去了。看着 CPP 领着初三学弟去吃饭。我吃了肉夹馍和一碗番茄鸡蛋面。
回到酒店,六点多先洗了个澡,然后去串门。说是说复习,其实是刷视频去了(?
迟了,回到房间,刚想刷牙,碰到 CPP 来收缴手坤,痛失。
然后就睡了?(空调的灯好亮啊!睡不着……)
Day
早上
地点:酒店。
早上和线段树大哥
吃完饭又回到房间里去了,无聊(?)刷了亿会视频。
???我去,十点多了,要不要复习的啊!
赶紧去猫的房间里看 My Experience。看到一半笔记本水土不服花屏了……重启不显示?气……拿出手机,卡得要死。却发现七分钟前 CPP 叫我们去吃中饭了,那就走吧。
中午
地点:饭店、酒店。
我 TM 手机真的废物啊(爷爷用剩下的……),冬妮娅吃完饭了,我小程序点餐界面还没进去……晕,只好求助于猫猫。发红包也操作了好久……
赶回酒店,准备出发。收拾好了自己的东西,以及线段树大哥的东西。下楼,退房。
碰见流一地了,大家在讨论早上的 J 组。没认真看,随便胡了几题,也不知道对不对。
坐车去考场,要先放行李。在车屁股后面捣鼓半天,塞不进去,司机一来,把行李一立起来就进去了……还被嘲讽了,雾。
下午
地点:考点。
到了考点,CPP 先给我们合了一张影。烟雨迷蒙,是个写随笔的题材(?)。
提前到了,在楼下等着开门。人真多啊,肩并肩密密地挨着(朱自清乱入)。又碰到流一地了,大家在一起聊了一会,就进去了。
坐电梯上去的,上了个厕所就进考场了。
罚坐……艰难地罚坐……终于可以看考生须知了……终于可以打开第一层压缩包了……终于给试题 PDF 的密码了!
看了一下,T1 感觉不难。代码敲出来,改一改,我去,这不就是求出现最多的数字出现的次数吗?哎,去年 T1 也是水题,但是数组开小了……算了,回过头再对拍吧。
T2 物理题,加速度,不难,对于每个
开了 T3,染色问题,一眼 DP,敲了
看 T4,没头绪,打了特殊性质 AB,前去拍前面的了。T1 T2 不想拍,也不好拍,T3 打过暴力,简单拍了一下,没啥问题,就怕
之后分数没有变化过……没检查出来什么脑瘫错误,交卷了。
T1 | T2 | T3 | T4 |
---|---|---|---|
NAN | |||
NAN | |||
平均
一道图论都没有,DP 倒是有两题(也许 T2 算半个 DP 吧)。
晚上
地点:大巴。
WTF,最后一题
吃完晚饭,不知道干啥。
发现左边小河长看番,加入了进去。几个小时下来,看爽了……脖子都有些酸。手机快没电了,又一起听了会歌,就到学校了。
回家,睡觉!
Day
早上
地点:学校。
CPP 说
到了学校,洛谷前三题有民间数据了,敲了敲
Day
CCF 诈骗:
敲了会电子木鱼。出成绩了!没挂分,应该有 1= 吧?(
T1
赛时代码
#include <iostream> #include <cstdio> using namespace std; const int N = 100010; int n, r[N], buc[N]; int rem; signed main() { #ifndef XuYueming freopen("duel.in", "r", stdin); freopen("duel.out", "w", stdout); #endif scanf("%d", &n); for (int i = 1; i <= n; ++i) { scanf("%d", &r[i]); ++buc[r[i]]; } for (int i = 1; i <= 100000; ++i) { if (buc[i] >= rem) rem = buc[i]; } printf("%d", rem); return 0; }
估分代码
#include <cstdio> #include <iostream> using namespace std; const int N = 100010; int n, v[N], buc[N], rem; signed main() { scanf("%d", &n); for (int i = 1; i <= n; ++i) scanf("%d", &v[i]), ++buc[v[i]]; for (int i = 1; i <= 100000; ++i) if (buc[i] >= rem) rem = buc[i]; printf("%d", rem); return 0; }
T2
赛时代码
#include <iostream> #include <cstdio> #include <algorithm> #include <cmath> using namespace std; const int N = 100010; int n, m, len, V; int d[N], v[N], a[N]; int p[N], L[N], R[N]; int mxL[N], dp[N]; inline long long CEIL(long long a, long long b) { if (b < 0) b = -b, a = -a; if (a > 0) return (a - 1) / b + 1; return a / b; } void solve() { scanf("%d%d%d%d", &n, &m, &len, &V); for (int i = 1; i <= n; ++i) { scanf("%d%d%d", &d[i], &v[i], &a[i]); } for (int i = 1; i <= m; ++i) { scanf("%d", &p[i]); mxL[i] = 0; dp[i] = 0; } dp[m + 1] = 0; int cnt = 0; for (int i = 1; i <= n; ++i) { int rin, rout; if (a[i] > 0) { if (v[i] > V) { rin = d[i], rout = len; } else { rin = min((len + 1) * 1ll, d[i] + (2ll * v[i] * (V - v[i]) + 1ll * (V - v[i]) * (V - v[i])) / (2ll * a[i]) +1ll ); rout = len; } } else if (a[i] < 0) { if (v[i] <= V) continue; rin = d[i]; rout = min(1ll * len, d[i] + CEIL(2ll * v[i] * (V - v[i]) + 1ll * (V - v[i]) * (V - v[i]), 2ll * a[i]) -1ll ); } else { if (v[i] <= V) continue; rin = d[i], rout = len; } if (rin > rout) continue; L[i] = lower_bound(p + 1, p + m + 1, rin) - p; R[i] = upper_bound(p + 1, p + m + 1, rout) - p - 1; if (L[i] > m || L[i] > R[i]) continue; ++cnt; mxL[R[i]] = max(mxL[R[i]], L[i]); } for (int i = 1; i <= m; ++i) mxL[i] = max(mxL[i], mxL[i - 1]); for (int i = 1; i <= m + 1; ++i) { dp[i] = dp[mxL[i - 1]] + 1; } printf("%d %d\n", cnt, m - dp[m + 1] + 1); } signed main() { #ifndef XuYueming freopen("detect.in", "r", stdin); freopen("detect.out", "w", stdout); #endif int t; scanf("%d", &t); while (t--) solve(); return 0; }
估分代码
#include <cstdio> #include <iostream> #include <algorithm> using namespace std; const int N = 100010; int n, m, len, V; int d[N], v[N], a[N]; int L[N], R[N], p[N]; int mxL[N], dp[N]; inline long long CEIL(long long a, long long b) { if (b < 0) a = -a, b = -b; if (a > 0) return (a - 1) / b + 1; return a / b; } void solve() { scanf("%d%d%d%d", &n, &m, &len, &V); for (int i = 1; i <= n; ++i) { scanf("%d%d%d", &d[i], &v[i], &a[i]); } for (int i = 1; i <= m; ++i) { scanf("%d", &p[i]); mxL[i] = dp[i] = 0; } dp[m + 1] = 0; sort(p + 1, p + m + 1); int cnt = 0; for (int i = 1; i <= n; ++i) { int rin, rout; if (a[i] == 0) { if (v[i] <= V) continue; rin = d[i], rout = len; } else if (a[i] > 0) { if (v[i] > V) { rin = d[i], rout = len; } else { rin = min(1ll * (len + 1), d[i] + (2ll * v[i] * (V - v[i]) + 1ll * (V - v[i]) * (V - v[i])) / (2ll * a[i]) + 1 ); rout = len; } } else { if (v[i] <= V) continue; rin = d[i]; rout = max(1ll * d[i], d[i] + CEIL(2ll * v[i] * (V - v[i]) + 1ll * (V - v[i]) * (V - v[i]), 2ll * a[i]) - 1 ); } if (rin > rout) continue; L[i] = lower_bound(p + 1, p + m + 1, rin) - p; R[i] = upper_bound(p + 1, p + m + 1, rout) - p - 1; if (L[i] > m || L[i] > R[i]) continue; ++cnt; mxL[R[i]] = max(mxL[R[i]], L[i]); } for (int i = 1; i <= m; ++i) { mxL[i] = max(mxL[i], mxL[i - 1]); } for (int i = 1; i <= m + 1; ++i) { dp[i] = dp[mxL[i - 1]] + 1; } printf("%d %d\n", cnt, m - dp[m + 1] + 1); } signed main() { int t; scanf("%d", &t); while (t--) solve(); return 0; }
T3
赛时代码
#include <iostream> #include <cstdio> using namespace std; const int N = 200010; const int M = 1000010; using lint = long long; int n, v[N]; namespace O_N2 { const int N = 2010; lint dp[N]; lint sum[N]; inline bool check() { return n <= 2000; } void solve() { for (int i = 1; i <= n; ++i) { sum[i] = 0; dp[i] = 0; } for (int i = 2; i <= n; ++i) { sum[i] = sum[i - 1]; if (v[i] == v[i - 1]) sum[i] += v[i]; } for (int i = 1; i <= n; ++i) { for (int j = 0; j < i; ++j) { dp[i] = max(dp[i], dp[j] + sum[i] - sum[j + 1] + (v[i + 1] == v[j] ? v[j] : 0) ); } } lint ans = dp[n]; printf("%lld\n", ans); } } namespace xymakioi { lint dp[N], sum[N], mx[M]; const lint inf = 0x3f3f3f3f3f3f3f3f; void solve() { for (int i = 1; i <= n; ++i) { sum[i] = 0; dp[i] = 0; mx[v[i]] = -inf; } mx[0] = -inf; for (int i = 2; i <= n; ++i) { sum[i] = sum[i - 1]; if (v[i] == v[i - 1]) sum[i] += v[i]; } lint pre_max = 0; for (int i = 1; i <= n; ++i) { dp[i] = max(pre_max, mx[v[i + 1]]) + sum[i]; pre_max = max(pre_max, dp[i] - sum[i + 1]); mx[v[i]] = max(mx[v[i]], dp[i] - sum[i + 1] + v[i]); } lint ans = dp[n]; printf("%lld\n", ans); } } void solve() { scanf("%d", &n); for (int i = 1; i <= n; ++i) { scanf("%d", &v[i]); } if (O_N2::check()) return O_N2::solve(); xymakioi::solve(); } signed main() { #ifndef XuYueming freopen("color.in", "r", stdin); freopen("color.out", "w", stdout); #endif int t; scanf("%d", &t); while (t--) solve(); return 0; }
估分代码
#include <cstdio> #include <iostream> using namespace std; const int N = 200010; const int M = 1000010; using lint = long long; const lint inf = 0x3f3f3f3f3f3f3f3f; int n, v[N]; lint mxv[M], dp[N], sum[N]; void solve() { scanf("%d", &n); for (int i = 1; i <= n; ++i) { scanf("%d", &v[i]); dp[i] = -inf; mxv[v[i]] = -inf; sum[i] = 0; } v[n + 1] = 0; mxv[0] = -inf; for (int i = 2; i <= n; ++i) { sum[i] = sum[i - 1]; if (v[i] == v[i - 1]) sum[i] += v[i]; } lint pre_max = 0; for (int i = 1; i <= n; ++i) { dp[i] = max(pre_max, mxv[v[i + 1]]) + sum[i]; pre_max = max(pre_max, dp[i] - sum[i + 1]); mxv[v[i]] = max(mxv[v[i]], dp[i] - sum[i + 1] + v[i]); } printf("%lld\n", dp[n]); } signed main() { int t; scanf("%d", &t); while (t--) solve(); return 0; } /* dp[i] = max(dp[j] + sum[i] - sum[j + 1]) */
T4
赛时代码
#include <iostream> #include <cstdio> #include <algorithm> #include <vector> using namespace std; const int N = 150010; const int lgN = 18; using lint = long long; int n, m, K, T; int _a[N]; char d[lgN][N]; int _x[4], a[N]; struct Question { int t, idx; } q[N]; namespace A { inline bool check() { if (T != 1) return false; for (int i = 1; i <= m; ++i) if (q[i].t != (q[i].t & -q[i].t)) return false; return true; } int val[N]; inline int add(int l, int r, bool o, int t) { if (o) swap(l, r); if (a[l] >= t) return l; return r; } void solve() { lint ans = 0; for (int _ = 1; _ <= m; ++_) { if (_ > 1 && q[_].t == q[_ - 1].t) { ans ^= val[1] * q[_].idx; continue; } int s = q[_].t, k = 0; while (1 << k < s) ++k; for (int i = 1; i <= s; ++i) val[i] = i; for (int __ = 1; __ <= k; ++__) { int rem = 1 << (k - __); for (int i = 1; i <= rem; ++i) { int ls = (i - 1) << 1 | 1; int rs = i << 1; val[i] = add(val[ls], val[rs], d[__][i] == '1', __); } } ans ^= 1ll * val[1] * q[_].idx; } printf("%lld\n", ans); } } namespace B { inline bool check() { return n <= 5000 && m <= 5000; } struct node { int cid; lint sum; }; node val[N]; inline node add(node x, node y, bool o, int t) { if (o) swap(x, y); if (x.cid && !x.sum) { if (a[x.cid] >= t) return x; return y; } if (x.sum && !x.cid) { return { y.cid, x.sum + y.sum }; } if (!y.cid) { if (a[x.cid] >= t) return { x.cid, x.sum + y.sum }; return { 0, x.sum + y.sum }; } // if (a[x.cid] >= t); return { x.cid | y.cid, x.sum }; } void solve() { lint ans = 0; for (int _ = 1; _ <= m; ++_) { if (_ > 1 && q[_].t == q[_ - 1].t) { ans ^= (val[1].cid + val[1].sum) * q[_].idx; continue; } int s = q[_].t, k = 0; while (1 << k < s) ++k; for (int i = 1; i <= 1 << k; ++i) { if (i <= s) val[i] = { i, 0 }; else val[i] = { 0, i }; } for (int __ = 1; __ <= k; ++__) { int rem = 1 << (k - __); for (int i = 1; i <= rem; ++i) { int ls = (i - 1) << 1 | 1; int rs = i << 1; val[i] = add(val[ls], val[rs], d[__][i] == '1', __); } } ans ^= 1ll * (val[1].cid + val[1].sum) * q[_].idx; } printf("%lld\n", ans); } } namespace C { inline bool check() { return true; } struct node { int cid; lint sum; }; node val[N << 1]; inline node add(node x, node y, bool o, int t) { if (o) swap(x, y); if (x.cid && !x.sum) { if (a[x.cid] >= t) return x; return y; } if (x.sum && !x.cid) { return { y.cid, x.sum + y.sum }; } if (!y.cid) { if (a[x.cid] >= t) return { x.cid, x.sum + y.sum }; return { 0, x.sum + y.sum }; } // if (a[x.cid] >= t); return { x.cid | y.cid, x.sum }; } void upd(int u, int bf, int t) { if (t != 1) val[u] = add(val[u << 1], val[u << 1 | 1], d[t - 1][bf + 1] == '1', t - 1); if (u == 1) return; upd(u >> 1, bf >> 1, t + 1); } lint getans(int u, int bf) { if (!bf) return val[u].cid + val[u].sum; return getans(u >> 1, bf >> 1); } vector<int> qry[N]; void solve() { lint ans = 0; for (int i = 1; i <= 1 << (K + 1); ++i) val[i] = { 0, 0 }; for (int i = 1; i <= 1 << K; ++i) { val[(1 << K) - 1 + i] = { 0, i }; upd((1 << K) - 1 + i, i - 1, 1); } for (int i = 1; i <= n; ++i) qry[i].clear(); for (int i = 1; i <= m; ++i) qry[q[i].t].emplace_back(i); for (int i = 1; i <= n; ++i) { val[(1 << K) - 1 + i] = { i, 0 }; upd((1 << K) - 1 + i, i - 1, 1); lint res = getans((1 << K) - 1 + i, i - 1); for (int o: qry[i]) ans ^= 1ll * res * q[o].idx; } printf("%lld\n", ans); } } void solve() { scanf("%d%d%d%d", &_x[0], &_x[1], &_x[2], &_x[3]); for (int i = 1; i <= n; ++i) a[i] = _a[i] ^ _x[i & 3]; if (A::check()) return A::solve(); if (B::check()) return B::solve(); if (C::check()) return C::solve(); throw -1; } signed main() { #ifndef XuYueming freopen("arena.in", "r", stdin); freopen("arena.out", "w", stdout); #endif scanf("%d%d", &n, &m); for (int i = 1; i <= n; ++i) scanf("%d", &_a[i]); for (int i = 1; i <= m; ++i) scanf("%d", &q[i].t), q[i].idx = i; sort(q + 1, q + m + 1, [] (const Question& a, const Question& b) -> bool { return a.t < b.t; }); while (1 << K < n) ++K; for (int i = 1; i <= K; ++i) scanf("%s", d[i] + 1); scanf("%d", &T); int _ = T; while (_--) solve(); return 0; }
估分代码
[404 not found].
本文作者:XuYueming,转载请注明原文链接:https://www.cnblogs.com/XuYueming/p/18502198。
若未作特殊说明,本作品采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 为DeepSeek添加本地知识库
· 精选4款基于.NET开源、功能强大的通讯调试工具
· DeepSeek智能编程
· [翻译] 为什么 Tracebit 用 C# 开发
· 腾讯ima接入deepseek-r1,借用别人脑子用用成真了~