2024-01-01 13:10:00
2023 年就这样在恍恍惚惚间过去了,在这一年中发生了许多事情,就让我挑一些大家可能感兴趣的事情来讲讲吧。
如我在《我的 OI 生涯 —— 一名退役竞赛生的回忆录》中所述,我在竞赛失利后,已经选择了回归文化课道路。在回班以后,不时有好友、读者向我私信或者邮件询问我的近况。由于寄宿制学校放假时间极短,未能一一详尽回答,所以我将在此介绍一下我的近况,以回应各位热心读者的关切。
首先先给大家看点好笑的:
截止到现在,我在回班以后主要分为了以下几个阶段:
随着时间的推移,我从最开始几个月的 “听天书” 到现在已经逐渐适应了班内的学习节奏。虽然由于高一高二的长时间停课导致现在的成绩不太理想,但我相信通过一轮复习,我的知识水平会得到很大的提升。虽然今后还有一段很艰苦的道路要走,但我坚信只要努力就能克服路途上的艰难险阻,到达成功的彼岸。
暂时还没想好。考哪算哪,不强求。
暂时不考虑。原因有三:
高考之日未到,现在谈复读与否其实有点早。我个人以及我家长的意见都倾向于不复读。
复读,意味着又要承受一年高三的巨大压力,这对于一个人的身体和心理都是一个巨大的挑战,而我的身体较为羸弱,恐怕很难再扛得住一年这样的压力。除此之外,复读还使我在一条我不喜欢的且充满不确定性的道路上多耗费了整整一年的光阴,这样做真的值得吗?我不太好回答这个问题。
在强基计划公布以后,除非取得国家级的奖项,否则竞赛对高考已经没有了什么实质性的帮助,省一等奖最多也就给三四十分的优惠,所以最后还得看文化课的水平到底如何。
我学竞赛并无太多功利因素,更多的是怀揣着一份对计算机的热爱,这也是支撑着我度过这四年有余的竞赛生涯的最关键因素。此外,我也没见过几个一心为了功利还能取得好成绩的竞赛生。毕竟竞赛的学习过程并不轻松,且其对文化课的影响常常是显著的,所以从功利的角度来看,学习竞赛显然是不划算的。
不过,如果再给我一次机会,我还会选择学习竞赛。正如我在《我的 OI 生涯 —— 一名退役竞赛生的回忆录》中所述,竞赛带给我的并不仅仅是那几张薄薄的证书,更多的是思维方式的蜕变,这将在我今后的人生中产生深远影响。
高一的时候一定要打牢文化课基础,不然等到省选前有你紧张到哭的时候。我就是一个很好的反面教材,高一停课停早了导致文化课约等于没学,结果最后几场比赛前就非常害怕退役回去学文化课,于是就整夜整夜的失眠。
动漫于我的意义并不只是看个 “动画”,一段精彩的作画、一段感人的故事、一段轻松的日常,都能以其积极向上的乐观主义精神,将我从低谷中拉出来,使我能够更加乐观地面对今后的人生道路。
▲ 我宿舍内悬挂的《莉可丽丝》海报
▲ 故地重游(参见:USTC Hackergame 2021 旅行照片)
▲ 燕山大学
▲ 二南随拍
由于学业因素,在过去的一年里我用来写代码的时间大大减少。不出意外的话,在高考结束以前我都会保持这种低频活动状态。
对整体布局进行了一些重新设计。此外我还计划将其迁移至 Next.js 13 App Router,但尚未完工。
在新的一年里,我会继续冲刺高考,争取考一所好大学。同时也在此感谢读者们对我的关心,不过由于我长期住校,故评论、邮件等可能不会及时回复,敬请谅解。
最后,祝大家新的一年里身体健康,万事如意!
2023-05-28 11:31:46
在某些情况下,我们会遇到需要将网页打印出来的需求。但是,直接打印网页的效果往往不尽如人意,因为网页的排版和打印的排版是不同的。本文将介绍如何创建一个在打印时具有出色的质量和可读性的网页。
@media print
媒体查询经常编写 CSS 的读者应该对 @media
媒体查询是比较熟悉的了。这个语句在创建响应式网页时是非常有用的,经常被大家用来调整不同屏幕宽度的设备间的样式。而 @media print
媒体查询则是专门用来调整打印时的样式的。
@media print
媒体查询的语法如下:
@media print {
/* 在这里定义打印时应用的样式 */
body {
font-size: 12pt;
}
.header,
.footer {
display: none;
}
/* 更多样式规则... */
}
这些样式只会在打印时应用,而不会在屏幕上显示。了解了 @media print
媒体查询的基本语法后,我们就可以开始创建打印友好型的网页了。
在打印时,页面上的一些与正文无关的元素需要被隐藏掉。
比如在《二分图学习笔记》页面中(本文在后续部分中将会一直以本页面作为示例),顶部的导航栏以及右侧的侧边栏与正文信息并没有什么关联,因此可以在打印输出中隐去。
▲ IT 之家某篇文章的打印版截图。
从这张截图中可以看出这个页面似乎并没有对打印机进行适配,并且侧边栏还遮挡到了正文中的文字。不过由于笔者并没有找到更好的遮挡示例,因此只能给出这么一个有点勉强的例子 —— 侧边栏按照上一节中的建议是应该要被隐藏掉的。
对于这种情况,需要在设计、编写页面布局的时候下功夫,以避免遮挡到正文。
除了文字被遮挡的问题,截图下部的超链接在纸质媒介上显然是不能被点击的。
以此处的超链接为例,可以通过特殊处理来在纸上显示出链接的实际指向 URL:
@media print {
a:not([href^='#'])::after {
content: ' (' attr(href) ')';
font-size: 80%;
color: var(--color-fg-muted);
}
}
效果如图:
除此之外,如果需要,还要对字体及其大小进行一些调整。
笔者认为在相当一部分情况下,使用衬线字体在打印后的观感要比使用非衬线字体时好很多。(PS:在此对通篇使用微软雅黑出试卷的老师表示强烈谴责)
有时网页上会包含一些音频、视频等多媒体内容,这些内容在纸质媒介上与超链接类似,无法与读者交互。
此时可以考虑提供一些替代文本来对其内容进行描述,并提供指向相关资源的链接、二维码等辅助工具来帮助读者获取多媒体资源中的信息。
在网络世界中,我们的常用单位诸如像素(px)、百分比(%)、相对大小(em、rem) 等。然而在现实世界中,我们常用的单位则为物理单位,如厘米(cm)、点(pt)等。这导致了在打印输出时需要额外注意单位制相关的问题。虽然现代浏览器对这些问题的处理已经比较优秀了,但在部分情况下仍然会导致页面排版布局出现错乱。
经常写 CSS 的读者应该对 CSS 中的样式优先级不陌生了。笔者建议在编写 CSS 时将打印相关样式置于靠下的位置以免产生冲突,同时也可以适当地使用 !important
来强制覆盖一些样式。
可以使用 DevTools 来模拟打印环境进行调试(按 Ctrl + Shift + P 组合键唤出菜单;对于中文版浏览器,请搜索「打印」关键字)。
感兴趣的读者可以访问 oi.baoshuo.ren/bi-graph 并尝试打印该页面。
▲ 原网页
▲ 打印效果(预览)
2023-04-02 17:33:44
在经历了四年半的不算短也不算长的时光后,我的 OI 生涯画上了一个并不算圆满的句号。
是的,我退役了。
写回忆录的本质是自己给自己整理遗容。
—— 郑渊洁《舒克和贝塔历险记》
谨以此文纪念我与 OI 一同逝去的青春。
我第一次接触信息学竞赛时在初一上学期(2018 年)。当时学校与旁边的高中部合作开设了「信息贯通」课程,使得我在信息老师的帮助下了解到了信息学竞赛这个东西。这便是一切的开端了。
在学 OI 之前,我已经具有了一定的 Python 基础,并且还掌握了一些网页开发相关技能。不过这些东西和 OI 并没有什么关系,如果硬要说有的话,那么这些东西对我的帮助就是使得我的 C++ 语法入门过程并没有那么痛苦,促使了我留下来继续深入学习 OI 知识。
我对计算机有着与众不同的兴趣 —— 别的同龄人用电脑基本上都是打游戏,而我用电脑则是折腾软硬件、写写代码等等。在接触 OI 之后,我找到了有着相同兴趣的一群小伙伴,我们可以在一起交流很多计算机相关的东西 —— 大多是算法相关的内容 —— 我们都为代码可以实现的无限可能性着迷。这让我对 OI 的喜爱更甚 —— 又能学知识,还能结交好友。
▲ 初中开设的「信息贯通」课程正在授课。来源于学校微信公众号。本人跟随高中部学习,因此不在照片中。
不过与此同时,我在班级里并不是很合群,因为我不打游戏。当时流行的游戏叫做《王者荣耀》,同学们周末都会废寝忘食的去玩它,然后在返校后的课余时间交流上周末打游戏的心得,以及规划下次放假的游戏时间。而我因为对游戏没有兴趣,所以很难插上话。这使得我与班级的主体渐行渐远,转而更加亲近我们这个小圈子,在这个圈子里我能获得更多的认同感和归属感。
我初中的 OI 生涯到初三下学期(2021 年)告一段落。初三下学期是一段比较痛苦的日子 —— 我需要补习文化课,来应对即将到来的中考。我和我在学习 OI 时认识的邻班的好伙伴赵泽峰同学一起互帮互助(其实还是我向他取经比较多),共同学习。那段时间几乎每天我们两个都是最后回宿舍睡觉的人。最后的结果很令人振奋,我们都考上了我们理想的高中 —— 石家庄二中实验学校,也就是前文中提到的高中部,这所重点高中有着专业的教练团队和竞赛培养体系,是学习竞赛的好去处。
▲ 二南日落。本人在 2022 年 6 月摄于石家庄二中实验学校存真楼上。
进入高中后,我有更多的时间学习 OI,但相应地,学习文化课的时间减少了。我最初被分入了竞赛班,但我的成绩排在很靠后的位置,这是因为我不仅文化课考不了高分,而且不能兼顾竞赛和文化课的学习。这招来了文化课老师的不满 —— 学竞赛不拿金牌最后还得学文化课,而且文化课成绩太差会拉低班级平均分,这显然是他们所不想看到的。好在我高一下学期被编入了另外一个省理科实验班,这个班的班主任是上一届带竞赛班的班主任(我先前在竞赛班时班主任从没有接触过竞赛生),所以相比之下高一下学期时来自文化课班的压力要减轻许多。
高一下学期的期中考试结束后,我停课了。这给了我充足的时间去研究一些较为困难的知识点,这对我来说是一大收获。
▲ 我在存真楼上旧信息中心 NOI 教室 3 中的机位。由本人在 2022 年 6 月拍摄。
然后我就进入了高二,每天都被模拟赛压得喘不过气来。当时基本上每天的规划都是上午模拟赛,下午改题,晚上隔三岔五的还会有南校自己办的「基础模拟赛」—— 专练第一、二题难度,防止挂分(虽然该挂的还得挂)。
直到快要退役的时候,才能真正体会到往届学长们的痛楚。我送走了好几届学长,这次终于要成为了被送走的那一批。CSP-S 2022 拿了个一等,全省二十多名,这应该就是我能够达到的最好的成绩了吧。NOIP 2022 被取消了,没有考成。春季赛和省选又给我强行续了几个月的命,但于事无补。
▲ 我在 CSP-S 2022 中获得的获奖证书。
我的 OI 之旅到这里就结束了。退役之后特别喜欢学长们常说的一句话:菜是原罪。如果我的实力能够再强一些的话,我肯定不用担心退役这件事情。但即使最终的结局必然是退役,我也无悔竞赛。
在学习竞赛的过程中,我收获了许多宝贵的经验和知识。其中最重要的收获之一就是我的思维方式进行了深刻的转变。
竞赛知识点的数量很大,并且通常都比较深入、复杂、抽象。这要求我们必须具备良好的理科思维和创新思维,能够将问题进行深入研究,并将其与实际问题相结合,产生新的想法和解决方案,从而在比赛中熟练运用它们。
OI 中所涉及的知识非常广泛,仅在《NOI 大纲》中列出的知识点就已经能够涉及到好几摞半人高的书堆了。此外,在日常训练的过程中还需要接触到各类国内外的在线资料,这同时需要良好的外语水平。等等。
对我而言,在学习 OI 之余,我还略微了解了一些软件工程相关的知识,写了一些小玩具出来。
我结识了许多友好的同学,他们都非常优秀。在竞赛学习的过程中,我们经常会相互帮助,互相学习。这种友好的关系使得我们的竞赛旅途更加愉快。
俗话说得好,「人外有人,天外有天」。在学习竞赛的过程中,我时常有机会接触到并认识来自全国乃至全世界的优秀选手。
比自己更强的选手不一定只是对手,更可以成为我们的老师和榜样。从他们身上可以学习到很多独特的思维方式和优秀的解题方法,而这些在自己日常独自训练时是很难接触到的。所以要学会欣赏和学习优秀选手的思路和方法,并从中受益、成长。只有这样,我们才能不断提高自己的水平,成为更好的自己。
对于大部分人,竞赛和文化课是不可兼顾的。既然要抽出时间来学习竞赛,那么就必须压缩一些干其他的事情的时间,比如学习文化课。这会导致文化课的学习效果受到影响,然后成绩就不可避免地下滑了。
考试成绩下降之后,班主任和任课老师们自然会有意见。竞赛不是一条捷径,我们学校每年只有那么几个人能够进入省队并在国赛中取得奖牌,其他人则会慢慢地被淘汰下来,这是不可避免的。老师们自然希望我们的文化课成绩要好一些,所以会鼓动甚至要求我们放弃学习竞赛,毕竟相比之下,竞赛的容错率和回报率太低了。
那么如何在竞赛和文化课之间取得一个较好的平衡就成了一个棘手的问题,这个问题各路人马争论至今也没有一个定论,我觉得以后也不会有一个定论,毕竟人和人是不一样的。
在春季赛后,我休息了半天便准备考虑回归文化课学习的事宜。
我先回班找到了各科的任课老师们,向她们说明了我的实际情况。她们表示理解,希望我能够尽快找回状态,回归文化课的学习,因为我已经落下了很多课程的学习进度。
一些能听懂的科目自然也是要回班听一听的,网课讲得显然不如老师好。不能听懂的科目就只能自己看书听网课,一轮复习再回班跟了。
刚退役的时候还是很失落的,也不能专注到文化课的学习上,不过经过后来的慢慢调整,现在情况有转好的迹象。再慢慢观察吧。
不论结果如何,我能坚持学习竞赛到今天,都少不了来自家长、教练和同学们的鼓励与支持。
我想感谢我的父母,没有他们的支持和鼓励,我不可能坚持到今天。
我想感谢我的教练任亮老师和聂文彬老师,没有他们的指导和帮助,我不可能取得今天的成绩(虽然并不是很出类拔萃)。
我想感谢我的同学们,没有他们的陪伴和帮助,我不可能从竞赛学习中收获如此多的东西。
虽然退役了,但是我应该还会经常回来 OI 圈子看一看,没准还会参加一些比赛呢。
一切皆有可能,接下来的日子里,我会继续努力,不断提高自己的水平,成为更好的自己。
竞赛不是火,却能点亮一生。
这是石家庄二中实验学校旧信息中心旁的信息学竞赛教室墙外贴的一句话。
这句话的意思是,学习竞赛虽然不会像火焰燃烧那样为当下带来光明与温暖,但是它能够在一个人的一生中产生持久的影响。竞赛可以激发人的竞争精神,并培养毅力和耐力等品质。这些优点不仅在竞赛过程中得到锻炼,而且会伴随一个人的一生,对其产生长远、积极的影响。
上初中时第一次看到这句话时,我便对其留下了深刻的印象。随着时间的推移以及心境的不同,每次看到这句话,我都会对其有不同的理解。直到我的 OI 之旅走到尽头之时,我才明白了这句话之中的深意。
在退役之前的一个晚上,我走出实验楼的机房,向旁边的教学楼望了过去。灯火通明的教学楼与人烟稀少的实验楼形成了鲜明的对比 —— 这使得我莫名地产生了一种怅然若失的感觉 —— 我的竞赛之旅即将结束,我将要离开这个我已经熟悉的环境,去面对一个陌生的未来。
我想起了小时候读过的一首诗歌中的内容:
也许多少年后在某个地方,
我将轻声叹息把往事回顾,
一片树林里分出两条路,
而我选择了人迹更少的一条,
因此走出了这迥异的旅途。
– The Road Not Taken, Robert Frost.
我选择了竞赛,一个小众的发展方向,而这个选择决定了我今后的人生道路。竞赛决不是捷径,它只是另一种艰辛的生活方式。我不知道未来的路会怎么走,但我知道,我会一直一步一步脚踏实地地走下去。即使不再参加与竞赛相关的活动,竞赛带给我的思维方式也将伴我一生。
【心态乐观】
有人说,“生命中,我们都接到不同的剧本。平淡或浓烈,欢笑或眼泪,我们总要演好,直至落幕。”
心态好,一切都好。积极乐观的心态,是幸福生活的钥匙。
不管发生什么事,记得告诉自己,一切都会过去,好事自会发生。
—— 摘抄:人民日报夜读《善待自己,过张弛有度的生活》,2023 年 02 月 25 日。
大家都说,高考是千军万马过独木桥,不容易。
可是又有几个「大家」知道,竞赛是一个人摸黑走路,盲人骑瞎马,半夜临深池?
在无数个孤独清冷的深夜,无数次羡慕已经安然入梦的同学们。
我们都是行走在镜面边缘的人。
低下头看到的,是半个迷茫的自己,和半个不见底的深渊。
到哪里,会不会跌倒,是到终点还是滑进深渊,都不知道。
唯一确定的是,自己只有一个人。
—— 《行走在镜面的边缘》
得到与失去,只有时间会去评判;成功与失败,只有历史能去仲裁。
我不会永远成功,正如我不会永远失败一样。
—— 洪骥《……》
本文为原创文章,未经许可禁止任何形式的复制、摘抄与转载。
2023-02-08 09:21:05
#define int long long
是一种未定义行为,尽量不要在代码中使用它。
在算法竞赛社区中,经常能看见有人在代码中使用 #define int long long 来偷懒。我是一直极力反对这种做法的,因为这种做法会导致代码的可读性大大降低,并带来一些难以预料的问题。
在 ISO/IEC 14882:2014(E) 的 17.6.4.3.1 Macro names 一节中,有这样一段描述:
翻译并整理一下,就是:
翻译单元不可
#define
或#undef
词法上等同于下列部分的名称:
C++ 中的关键字(表 4、表 5,在 2.12 节 Keywords
[lex.key]
中给出);有特殊含义的标识符(表 3,在 2.11 节 Identifiers
[lex.name]
中给出);任何标准属性记号(attribute-token,在 7.6 节 Attributes
[dcl.attr]
中给出)。
也就是说,标准中 并不允许 #define int
这种操作。
在 GCC 的 C Preprocessor 文档中 给出了下面的说明:
You may define any valid identifier as a macro, even if it is a C keyword.
也就是说,GCC 并没有严格按照标准来实现预处理器,而是稍微放宽了一些限制以允许通过这种方式来使得代码更加灵活,便于增强代码的向下兼容性。
相关文档中并未提及是否允许 define 关键字,但源代码中未见相关限制。
#define
指令 相关文档中并未提及。
使用适当的数据类型来存储数据,有利于代码的可读性和稳定性,便于编写和调试。同时,正确设置变量类型也能提高程序的运行速度和效率。因此,我们应该做好正确的数据类型定义,而不是在编写代码时滥用 #define int long long
。
2022-12-31 22:28:44
又一年过去了。由于学业繁忙,这一年中发生的能写出来公之于众的事情并没有多少,但做一些微小的记录总是值得的,所以就有了这篇年度总结。
先向大家报告一个好消息,我在 CSP-S 2022 中取得了省一等奖(省排第 30),这么多年的竞赛算是没有白学。
不过,按照正常的进度,到 NOIP 2022 结束之时也就是我的退役之日了,毕竟河北省只有 15 个省队。
由于疫情影响,河北省取消了 NOIP 2022,并将在 2023 年 3 月举办春季赛,以此作为省选成绩的参考,这也就意味着我可以继续冲刺省选了(虽然进省队的希望不大,但仍然可以一试)。
但是,现在也是时候考虑如何补习文化课的事情了。
在得知 NOIP 2022 取消后,我们便返回家中,开始了上网课的日子。
跟班上网课貌似不太现实,所以只好跟着竞赛一起上网课。竞赛这边没有早读,早上上课时间比较晚,可以多睡会。
在网课期间既要补习文化课,又要兼顾竞赛的进度,实属一个难题。
此部分内容没有文字描述。关于我感染之后的情况记录,可以查看《我的新冠阳性日记》
感谢炮总相助,今年 3 月我终于有了一段属于自己的 IPv4 地址段 —— 174.136.239.0/24
。不过因为线路问题,这段地址并没有开展大规模应用。
关于 AS141776 的更多信息,请访问 baoshuo.ren/network。
基于 Vite + React + Primer Design 的新个人主页上线了!
新的个人主页主要分为了个人简介、项目介绍、友情链接、项目单页等几个板块,并可以方便地在后期增删页面及其内容。
请访问 baoshuo.ren 了解更多信息。
又经过了半年多的开发,OIerDb NG 正式上线了。
详细介绍可以查看文章《OIerDb NG —— 新一代的 OIerDb》,在此不作过多叙述。
附上今年最后一个季度的访问量数据,平均日访客数也能保持在 900 人左右。
欢迎体验:oier.baoshuo.dev。
今年上半年折腾了折腾自己的 OI 博客,在折腾的过程中顺手给 Hexo 发了一些 PR,并在 Sukka 大佬的引荐下加入了 Hexo Core Team。
今年下半年正式接手了学校的 在线测评系统,并进行了 一些大改(当心过大的 diff 导致浏览器卡死)。
▲ 旧版界面
▲ 新版界面
除了界面更新之外,还增加了许多新功能,并修复了一些问题。在开发的过程中,也向上游 UOJ 官网版、UOJ 社区版发送了一些 Pull Request,算是为后人栽树了。
又是碌碌无为的一年呢!
2022 年就这样在疫情阴霾退散的过程中结束了。希望在走出这一困难之后,2023 年能够是一个更加美好的年份,让我们一起期待着明天的希望,共同迎接更加美好的未来。