1.比赛概况:比赛总共4题,满分400,赛时拿到20分。
2.比赛过程
当时第一题写的时候出了点bug,过。第二题不会,过。第三题有思路但不会写代码,过。第四题不会,过。反过来第一题有思路了,把代码写出来了样例也对了,保存!第二题写完代码,过!,最后没时间了,第三题写个输入输出也没多管,过!最后检查了一下。交卷!
3.题解报告
题目:(第一题)
题解:当时我的思路是定义两个结构体分别表示:当前时间、达达到家的时间,然后再用p+q算出来后于与当前时间相加满60进一。最后与达达到家的时间按时:分:秒的顺序比较最后判断然后输出“YES"或”NO"。但是很可惜错误!
下面来看看正解思路: 观察 的数据,数据较大,因此可以考虑到,将所有时间转成秒,然后在秒上进行加法后再比较。注意输入的格式,使用scanf会比较方便一。
出示一下AC代码:
但这代码有个缺陷尽量不要用万能头。
错误总结:为什么我的思路错了呢?因为如果出的样例是跨天计算的那么我的代码是无法实现的。
归根到底总体思路错误。
(第二题):题目:
题意:
给定一个序列,可以让序列中的一个数加上或减去 k。通过挑选处这个数字操作,使得这序列的最大值减最小值的值尽可能的小。
考试时无思路
补题后思路:
我们可以考虑,直接找到最终答案所在的那种情况。
我们将这个序列中非最大或最小值的数增大或减小 ,那么只会有两种情况:
最大值变大
最小值变小
这两种情况显然要比我们什么都不做更劣! 因此,如果想要让答案变得不劣,我们只有两种选择:
让最小值增大 (最小值(新)小于等于最小值(原)) 。
让最大值减小 (最大值(新)小于等于最大值(原) )。
这样,我们就可以将原来的考虑 种情况降到了只需考虑 种情况!
AC代码:
错误原因:没有完全理解题目意思,无思路
(第三题):题目:
我的思路:选出当前的最大值和最小值并用标记数组在此位置标记具体按照题目要求进行操作。
正解思路:我们要使得价格最低,也就是将高价商品想办法通过低价购买。
在有优惠券的情况下,既然要最小化,那么我们可以将当前最小和当前最大捆绑在一起实现 。
在没有优惠劵的情况下,最大的价格是一定要花费的,使用最大带次大,一定是花费最小的方式。
AC代码:
错误原因:当时想用枚举做题,但时间超限,就一直没有想到双指针的做法
(第四题):题目:
题意:给你一个只包含 大写字母 和 ? 的字符串,这个字符串中的 ? 字符可以被同时看作任何字符。 现在你要 计算最多有多少对 满足 并且。s[i]==s[j]
考试时思路无
正解思路:我们先来考虑不存在 ? 的情况。
设字母 在 中有 个。对于第 个 ,后面有 个 能与它匹配,第二个则有
个……
根据等差数列求和公式,字母 对答案的贡献即是
因此,我们只需要统计不同的字母在 中出现的次数即可得出答案。那么加上 ? 之后怎样让答案最大呢?
显然,由于 ? 只能同时看作一种字符,根据求和公式
, 越大,我们的结果增长的越
多,因此我们肯定希望 ? 变成出现次数最多的字符。
AC代码:
错误原因:没有完全理解题目意思,无思路
4.总结:
题目理解不当,思路跑偏....