CSP-S 2024 游记

plamya

2024-11-04 19:45:34

Life & Travel

初赛

初赛要去太仓考,有点远。

来的很早,在门口碰见一些同学。初赛自然是不用复习的,我和一同学(@daijieyuan)还在考前下了盘国际象棋。

考试稍微写一下,阅读程序五花八门,我无法完全看懂,有些是凭感觉写的。我认为这初赛比去年抽象。考试时又忘了记答案,出了门都没法对。、

最后成绩是 76.5,进复赛了。

复赛

复赛考点和去年一样,还是苏州大学实验学校。因为下雨所以来的晚了点,走进大厅看了看准考证,机房 30*,找啊找,一直找不到志愿者,最后发现志愿者在一个柱子后面,从门口根本看不到。

试机的时候打了会线段树,但是没打完就开始了。

开题。第一题题面怎么这么简单,看了看样例,这不求众数吗,想了一会好像没问题,写完了代码和本地评测的 bash 文件,半个小时过去了,开第二题。题面看得头晕脑涨,但思路非常清晰,首先确定超速区间然后贪心。区间我用的 lower_boundupper_bound,调了一坤时,把除了最后一个样例的样例都过了,中间犯了许多经典错误,如多测不清空。最后一个样例有一组数据差了 1,又调了半小时调出来了,CCF 真良心,要是样例弱了肯定寄。最后把贪心写了,一共花了三个小时。写完突然想再压个行,还好我马上把这个想法扔进了回收站里,整活还是等考完了再整吧。

附:T2 代码,整活版,无文件 I/O

#include <bits/stdc++.h>

using namespace std;

const int N = 100005;

int t, n, m, L, V, d[N], v[N], a[N], p[N];
vector<pair<int, int>> s;

int main()
{
    ios::sync_with_stdio(0), cin.tie(0), cin >> t;
    while (t--)
    {
        cin >> n >> m >> L >> V;
        for (int i = 0; i < n; cin >> d[i] >> v[i] >> a[i++]);
        for (int i = 0; i < m; cin >> p[i++]);

        for (int i = 0, l, e; i < n; v[i] > V ? l = lower_bound(p, p + m, d[i]) - p, l ^ m && (e = a[i] < 0 ? lower_bound(p, p + m, d[i] + (v[i] * v[i] - V * V - (a[i] << 1 | 1)) / -a[i] / 2) - p - 1 : m - 1, l > e || (s.push_back({l, e}), 0)) : a[i] > 0 && (e = upper_bound(p, p + m, d[i] + (V * V - v[i] * v[i]) / (a[i] << 1)) - p, e ^ m && (s.push_back({e, m - 1}), 0)), i++);

        sort(s.begin(), s.end());

        for (int i = 1; i < s.size(); s[i].first > s[i - 1].second ? m-- : s[i].second = min(s[i].second, s[i - 1].second), i++);

        cout << s.size() << ' ' << m - !!s.size() << '\n', s.clear();
    }

    return 0;
}

最后看第三题,题都没怎么看就写了个 20 分暴力,因为怕写不完。事实证明第三题很简单,但是由于我去年骄人的 175 => 50 战绩,我把最后半个小时都用来检查,顺便第四题写了个 180B 的 RP++ 代码。

最后离场的时候校对代码长度,但是没带笔,向老师借了一支。考完那些初三/烧鱼学长们一个个都 400 甚至 300+,压力巨大。

后来江苏的压缩包被爆破了,测了一下果然 220,一分不差。初评也是 220。这下退役前应该能去一次 NOIP 了,也不枉我这三年 OI。当然备考是不可能的,AFO 选手不可能备考(其实是因为期中考试 + AMC 12,考前就剩一点时间懒得备考了)

在此膜拜同班 280 巨佬 @yrwricky。祝各位 NOIP RP++。