CSP2023游记

CSP2023游记

因为只考CSP-S,所以是下午才去的纪中。我差不多一点二十就到了,然后在车上睡了二十分钟,一点四十才进纪中。

进了纪中,我感慨万千:这个我曾经熟悉的地方,我曾经向往的地方,如今却变成了我不知多久才能来一次的地方。回想起小学时在这里学信息学,学得快乐,玩得也很尽兴,每次夏令营和冬令营都像一次旅行,结营时我还总是舍不得走。如今再来看,这里还是熟悉的样子,环境与之前相比没有太大的变化,生态还是一如既往的好。

两点十分的时候准备进考场,我见到了纪中的几个以前的同学,和他们打了招呼。

进了考场,监考老师宣读考场纪律。我们的监考老师说话比较幽默,还跟我们分享了上午有考生写侮辱性注释的事(当然,监考老师让他删掉了)。

两点半开考后,先看T1T1T1,并不难,很快就切了。一看时间,已经两点四十七了,做这题用了将近二十分钟,还是有点慢。

再看T2T2T2,看完题就想到要用栈,再加个哈希,然后发现这道题就解决了。打完已经到了三点四十。这道题实现起来并不难,所以我用的时间还是太多了。

T3T3T3是一道模拟题,我照着题意打,花了一个多小时打出来。虽然题面看着很长,但实际上并不难打。后面调了一会儿,就过了大样例。

此时的时间时五点多一点,我只剩T4T4T4了。看了一下题,简单思考了一下,骗分是挺好骗的,但我好像已经想出了正解。我不知道剩下不到一个半小时打不打得出来,但后面还是决定去打正解。

这道题要分类得比较多,正解不好打,而且打的时候还陆陆续续出点问题。时间不知不觉到了六点,而我还有很多东西没打。六点零七时,我决定放弃正解,去骗分。谁知骗分的思路好想,但代码没那么好打,六点二十时骗分代码还没打多少。最后我只好放弃骗分,去检查前三题。

六点半,比赛结束了。

这次前三题都发挥得挺好,就是T4T4T4在策略上有些失误。

比完赛,我和纪中的几个以前的同学去附近吃饭。虽然我们有一段时间没见了,但关系仍旧很好,吃饭时还一直聊着学校里的琐事。

听纪中的那几个同学说,他们考得都不怎么好,还说快要退役了(这一点我不信)。但我听他们讲在纪中的生活,着实羡慕了。他们的伙食是真的好,夜宵还推出了新品。小卖部里的吃的虽然没有以前那么丰富,但比我们学校好很多。他们还说他们下午从五点到七点有两个小时吃饭和洗澡,所以他们还有很多时间打乒乓球和打篮球。之前在纪中学信息学的时候,教练总是让我们多运动,说“每天八小时的学习不如七小时的学习加一小时的运动”,所以那时我们每天都有很多时间打球和玩耍。而现在我的学校没有那么重视运动,所以我们的运动时间没那么多。根据亲身经历和他们的描述,我觉得纪中的生活还是挺令人向往的。

我还发现,他们考得不好,但是并没有表现得很沮丧,反而还有说有笑;而我,却在因为T4T4T4没拿到的部分分而懊恼。我突然意识到,学信息学为什么就非得那么功利呢?为什么就非要追逐一个很高的奖项呢?我之前一直是把信息学当做一门兴趣来学的,我觉得在学习知识的同时,能有一个舒适的学习环境,一群志同道合的朋友,过着自己喜欢的生活,其实拿什么奖、拿多少分已经不重要了。如果你能力很强但并不怎么快乐,那还不如过普普通通而又无忧无虑的生活。遵从自己的意愿,以自己喜欢的方式生活,不给自己太大的压力,这才是最重要的。

纪中的这些同学,他们以前在学习和生活中给予了我很多帮助和教导。如今,他们又教导了我一次。虽然今天有一点小失误,但我觉得,能够打出前三题,拿那么多分,已经很令人满足了。对自己的要求不能太高,尽力就好,开心就好。

(当然,以上都是个人观点)

记得以前每次出去和别人吃饭,都是吃完一直在等别人聊天,等得很不耐烦。这次,我们聊天聊得真的开心,根本不想走,家长催了我们好几次我们才恋恋不舍地散了。

到此,CSP2023告一段落。

### CSP 2023年9月考试 第2题 题目解析 #### 背景介绍 CSP(Certified Software Professional)是中国计算机学会主办的一项软件能力认证考试。其中,普及组和提高组分别针对不同层次的学生设计了多道编程题目。对于CSP 2023年9月的第二题——坐标变换问题[^2],该题主要考察学生对几何计算以及优化算法的理解。 #### 题目概述 此题的核心在于处理大规模数据下的坐标变换操作。通常情况下,直接模拟题目描述中的方法可以解决部分测试用例,但由于某些极端情况的存在,可能会导致运行效率低下甚至超时。因此,在实现过程中需要考虑如何减少不必要的重复运算并提升整体性能。 #### 解决方案详解 ##### 方法一:暴力枚举法 最简单的思路就是严格按照题目给出的要求逐一执行每一个步骤直到完成全部转换过程为止。然而这种方法存在明显的缺陷—当输入规模较大时会消耗大量时间和内存资源从而无法满足时限要求。 ```python def naive_transformation(points): transformed_points = [] for point in points: new_x = some_function_of(point.x) # Replace with actual transformation logic new_y = another_function_of(point.y)# Replace with actual transformation logic transformed_point = Point(new_x,new_y) transformed_points.append(transformed_point) return transformed_points ``` 尽管上述代码易于理解和编写,但在面对复杂场景时表现欠佳。 ##### 方法二:矩阵乘法加速版 考虑到很多常见的二维平面上点的操作都可以通过线性代数里的矩阵形式表达出来,我们可以尝试利用这一特性来简化我们的工作流程。具体来说就是把每次位移旋转缩放等动作封装成对应的变换矩阵然后再统一作用到所有待处理的对象上即可达到目的。 ```python import numpy as np def matrix_based_transformation(points,matrix): homogeneous_coords=np.array([[p.x,p.y,1]for p in points]) result=np.dot(homogeneous_coords,matrix.T)[:,:2].tolist() return [Point(*r)for r in result] transformation_matrix=[[cos_theta,-sin_theta,tx], [sin_theta , cos_theta ,ty ], [ 0 , 0 , 1 ]] transformed=matrix_based_transformation(original_set,np.array(transformation_matrix)) ``` 这里采用了NumPy库来进行高效的数值计算,并且构建了一个通用型较强的接口使得后续扩展变得非常方便。 ##### 性能对比分析 | 方案名称 | 时间复杂度 | 空间复杂度 | |----------|--------------------|---------------------| | 暴力枚举法 | O(n*m*k) | O(k) | | 矩阵乘法加速版 | O((n+m)*k)+O(p*q*r)| Depends on implementation| 从表格可以看出后者无论是在理论层面还是实际应用当中都能够提供更好的用户体验。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值