题解 | 2025浙江工商大学新生赛(上)
也算是本蒟蒻第一次参加线下的正式赛,结果不尽人意。但不重要了,写一篇题解复盘一下没过的题。
本题解按照题目难度梯度和校内赛时ac情况进行讲解,分上下集。上集难度总体可以接受,下集对新生略难,且大多为DP题。(其实是下集的题目我都没看过)
F.不要空格
签到题,但是其实也不是很签到,事实上也吓了大家一下。由于C/C++的输入输出按照空格等特殊字符进行分割,单纯的cin输入字符串并不能完全读入字符串,所以我们采用getline方法。
(话说能用py切,何乐而不为)
I.魔法镜
签到题,根据题目意思,最简单粗暴就是判断是不是对称字符。用左右指针从两端向中间靠拢判断字符是否满足题意即可。注意如果字符串长度为奇数,中间的字符必须自身对称。
第一个遗憾的点,第一次交的时候把一个等号替换成了感叹号,白吃了一个罚时。
A.很简单的数学题
第二个遗憾的点吧,自己没有转过弯。其实最直观的反应是这样的数字应该不多,所以果断写个小程序尝试暴力打表。不难发现10000以内只有四个数。接下来考虑,由于打表到十万运行速度已经堪忧了,所以从样例入手。尝试按照给定的样例模拟计算,不难发现:
对,既然因子之和是2X,那么通分之后分母必然为X,分子是2X,消掉为常数2,直接输出即可。看上去有着“要在草稿纸上大干一番”的架势,其实就是这么简单。
B.不再日落
考场上主要卡在了构造上,那么我们讲讲构造问题。
首先,拿到题目的第一反应必然是从较小数字开始尝试,发现在n<=4范围必然无解。
接下来开始思考怎么构造n>=5的情况。如果你对质数判断有过练习,应该很快就能想到,所有除了2之外的偶数都必然为合数,至少有一个因子为2。所以构造思路的核心就是让相邻数字之和为偶数。根据一些小学数学我们知道:奇数+奇数=偶数,偶数+偶数=偶数。所以核心就是奇偶数各自分组,最后考虑两组拼到一起。
拼起来的时候注意一下,由于偶数+奇数=奇数,我们需要对连接部分进行挑选。赛后补题想到最直观的方法就是双指针遍历奇数数组和偶数数组,对每一个组合进行质数判断,一旦发现有两个数字之和为合数就把它们移到各自数组的一头一尾,最后输出就好了(顺带一提,找到两个数字了就记得break。不然TLE)。
D.银河铁道之夜
很简单的一个思维题,但是考场上脑抽,想了两种办法,就是没把他们拼在一起。
对于一颗树,我们假定它是三棵树中最矮的。有两种肥料可以对它的高度做出贡献。所以我们只要看这棵树最高情况能到多高。
同时,我们考虑总肥料对生长高度的限制。三棵树高度之和最大为三种肥料数之和。我们考虑尽可能平均主义,那么三棵树的高度有:
所以,答案被束缚在上面四个值中最小的,即:
C.大杨的难题
由于整个串只由0和1构成,我们在串中挑选出 k+1 个 1 连续串,要使连续 1 的长度最大,本质上是通过翻转某些 0 段,将多个 1 段连接起来。一次操作可以翻转一个连续的 0 段(也可以翻转包含 1 的区间,但最优策略通常只翻转 0 段)。因此,最多翻转 k 个 0 段,从而最多连接 k+1 个 1 段。问题转化为:在字符串中选取一段连续的区域,包含不超过 k 个 0 段,并考虑该区域左右紧邻的 1 段(因为翻转后这些 1 段也会被连接进来),使得总长度最大。接下来,用滑动窗口维护整个字符串S,通过对窗口内的 1 和 0 个数进行统计,用max维护答案。
感想
赛后听完讲评,其实题解上篇的题目难度都不大,更多考察的是一些基础思维。但是放到线下赛场限时独立完成,也确实给选手们上了一些压力。还是多加模拟赛场环境进行练习,至少这六道题是可以a掉的。

