ALPC_Natural_Selection

news2024/9/19 10:06:31

刚刚结束的ICPC2023沈阳是自然选择号的最后一场 XCPC 区域赛,很高兴也很幸运能拿到校排名 rk4,圆了一个这半年才开始做的梦。在这里讲一下这支队伍的故事。

组队、训练

本来和@wjy666(aka maple)打完 EC Final 之后是想要退役的,因为一直处在基本不怎么训练只打比赛的状态,如果打不出更好的成绩也没什么意思了。之后在教练的建议下吸纳了大一零基础的大腿@geruome,想看看有没有可能冲击一下 WF。CCPC Final 是我们这支新自然选择号的首秀,当时没训裸打打了银。虽然成绩不亮眼,但是我们发现三个人的状态是舒服的,打好配合说不定真的有机会。

那就试试吧。

虽然这时候信心几乎为零。

后面一段时间在忙保研,于是8月初的 thu camp 成为了我们开始训练的第一站。打得很惨,场场被按在后排。坐在我们后面的银色子弹,几乎每场比赛都从头到尾压着我们打,给我打得有点自闭,不知道这个状态怎么能赢。现在看来,当时打得不好完全是因为三个人都好久没写代码,并且还没开始磨合。三个人的磨合,可能比个人的硬实力更为关键。

来只 maple

开始狂训是在9月。平均2天一场 vp,赛后再去补知识点。geruome 训练热情非常高,带着我们一起泡在俱乐部补题。这一个多月的时间打了差不多 20 场比赛,写题写多了手逐渐热了起来,我开始有了一点信心。期间去打了一场湖南省赛,也是拿到了第一次 ak。

秦皇岛、西安、桂林

秦皇岛赛前,信心差不多四成。

因为打了几场成绩还不错的 ucup,也很想在现场赛施展一下拳脚。不料,最终连金牌都没有拿到。maple 过了超高难度的 K,我最后 I 题写了一个多小时还是没有调出来。

西安的最后20min,是我们这辈子第一次看到出线的希望。当时我和 geruome 10min 内连续通过 I 和 A,过题数达到了8。此时压力全部来到了 maple 身上,这场能不能打到前五可能就看他能不能把 B 调出来。用他复盘的话来说,在我们8题的时候,他一瞬间被“过了就能出线”的压力给压垮了,完全不能静下心来调试。最终因为有一个变量名没改过来,还是没能通过。

但是这场比赛,让我们看到了希望,我们好像就要触碰到梦想的边缘了。即使在强队如云的情况下,只要我们发挥出正常水平也是可以一战的。面对后面强度预计不如西安的沈阳,我觉得我们有八成胜算。

然而之后的桂林,也是简单题卡住,H 没有人想到可以从父亲节点删元素。maple 深陷极具迷惑性的 L,本应该会做的 E 却因为没有早看而没能写完。

打了三场 XCPC,每场都暴露出来各种致命的问题,其实这些问题的根源还是比赛策略的问题。从秦皇岛放着 M 不做,C 不看,到西安没有把题目给到适合的人,再到桂林做不出 H 做了半场 L,还没有早看到会做的 E,关键的决策好像没有一步是对的。虽然复盘的时候,我们认为每一场的失误都是在赛中可以预判并即使修正的,但到了沈阳真的就能避免这样的问题吗?我不知道。

这时候我的信心又降回40%了。

这三站打完没什么心情合照了,放一张省赛的图

线下练手的机会已经没有了,下次就是沈阳的最后一舞,我需要静下心来沉淀一下。想要打出好的成绩,就必须把我们的特长发挥出来。我们三个的风格太不同了:maple 算数飞快,擅长贪心、dp 、构造等一切不需要科技的题,然而却不会写线段树;geruome 数据结构水平高超,擅长写恶心题以及计算几何,但好像不是非常懂 tricks,有的题会无从下手;我技能树比较全,对题目方向猜的比较准,思维比较灵活,但是上机脑子容易发懵,细节稍微一多就写不对。我们三个人单打能力应该都不大行,但合在一起恰好优势互补,哪种类型的题都有人做。

然而本应该分工明确的我们,在复盘的时候,总是有某段时间三个人都想不起来自己做了什么,好像没有任何进展,5h的比赛被我们打得像4h。其实,一道题目其实就那么几个关键点,思考方向正确的话不会花费太长时间的;如果思考方向错了,那就是在无用功,扔给队友或者一起讨论都要比一个人死磕要强。于是我们决定要调整比赛的节奏:每个人先看足够多的题,分给合适的人。如果一个人卡题了,那就大家一起看这个题并把它做出来,尽可能减少无意义的罚坐。

在最后两周的训练中,我们主要往年的区域赛题目为主,目标不再是做出难题,而是主要训练在可做题较多的情况下如何写的又快又稳,以及卡题时要怎么做。我让自己多读题,每道题扔出一些我的思考,然后分给对的人去做,我尽量不去陷入细节较多的题目。如果一道题我和队友讨论出来了,那就尽量扔给队友写,我再去开别的题。

出发前,我的信心处在叠加态中。想到我们没有人写过难一点的计算几何,我的数论水平还不够高超,Todo 里还有很多东西没有梳理……但没关系,我选择相信我们(洗脑)。

沈阳

两周没有参加比赛,热身赛坐在不大且摇摇晃晃的桌子前,居然有一点陌生的感觉。虽然两个略难的题目都没能通过,但没怎么影响到我。因为我知道,我们的训练量已经有了,默契程度已经够了,这两个月的训练成果,就看明天5h内的发挥了。挺残酷的,但这就是 ICPC,不是吗?

正赛总算开始了。拆开信封 2.5s 之后,geruome 就通过题目名发现签到题。之后 maple 也迅速过 E,此时排在 rk1。我读了 I,感觉是没什么技术含量的讨论题,应该是要过的(伏笔1),果断扔给 geruome。简单讨论后我发现 J 是简单题,贡献一发罚时后通过了(伏笔2)。这时候稳健跟榜,maple 看了 K 说一眼数据结构,直接丢给我,我看了看就写了,maple又迅速通过了 M。B 很快想到了一个 n^3 的思路,但是细节较多。于是先看了 H,猜了个做法扔给了 maple 去细想。在我上机写 B 的时候其实还没有完全想清楚,心里是没有一点底的,但我知道这道题必须过,所以只能先硬着头皮写,等着队友把我换下来想细节。当我发现我怎么也想不清楚细节的时候真的有点慌了——我写题的时候,信心会给我正反馈,当某道题我没有信心写出来的时候,我就写不出来,当我有信心能写出来的时候,我就能写出来。这时距离比赛结束还有1:40左右,手里还有三个没过的题目。我心里发毛,训练赛遇到这种情况,我基本就知道这题是出不来了。但是,今天是我最后的机会了。于是我出去上了个厕所,告诉自己说:没事,我今天就算没有别的任务,剩下的时间只要把这个 B 做出来就算没有遗憾了。强迫自己冷静下来以后,发现根据对称性能把很多细节都给扔掉。于是我思考清楚后,等着上机重构了一下代码,在 4:29 通过了。这期间,geruome 把 D 给过了,I 写了大部分。这时候,情况变得和西安一样,压力全部集中在了 geruome 身上。我们都知道,只要过了 I 就肯定能出线。看着 geruome 独自调试,我却帮不上忙,心里比我自己上机还要紧张。终于在比赛结束前40s,发现了可能是最后一个错误,但已经没有时间改完了。

比赛结束,全场掌声响起,我觉得没了。掏出手机想算一算到底有没有机会,但紧张到根本没法静下心来算罚时。看到出去打探的 maple 竖着四根手指回来的时候,我挤压了许久的情绪才终于释放了出来。

前进四:前进到 rk4

稍有遗憾的是,我们差 11min 罚时就能拿到杯子。如果我签到 J 没有 wa,我们三个就能一起上台共同举起季军奖杯。不过没有关系,rk4 也已经足够美好了。

后记

算了算时间,距离我敲下第一行 “Hello, world!”差不多刚好六年半,我也终于可以给磕磕绊绊的算法竞赛生涯画上一个圆满的句号。

如果说我们在这两个月学到了什么,一是经验,尤其是现场赛的经验。三场比赛,从 rk28 到 rk8 到 rk8,每一场比赛我们都能从中发现很多问题。比如秦皇岛 I 题,告诉我我不适合写细节多的题;秦皇岛 M,桂林 H,告诉我们卡住的题要大家一起看;西安 B,告诉我们题目要今早交给擅长的人。二是默契,三个人泡在一起训练的过程知根知底。谁擅长什么不擅长什么都互相了解的很透彻,于是在比赛中话说一半就能够心领神会,沟通非常高效,才能发挥我们各自的长处,真的达到了 1+1+1>3 的效果。

感谢两位给力的队友,和我一起实现了这个去年还不敢做的梦。还要感谢明日之风和金色传说出线 23WF 给我们的激励,以及感谢教练的 push。

祝 ALPC 越来越好。


说一下我 B 的做法吧,题解好像是 O ( n 4 ) O(n^4) O(n4) 的,我的做法可以做到 O ( n 2 ) O(n^2) O(n2),不知道大家是怎么做的。

定义 f ( n ) f(n) f(n) 表示长度为 n n n 的 turning permutation 中,1 在 2 左边的排列有多少。枚举第一个数填 i i i ,那么 1 , . . . , i − 1 1,...,i-1 1,...,i1 i + 1 , . . . , n i+1,...,n i+1,...,n 之间是独立的。于是有 f ( n ) = ∑ i = 1 n f ( i − 1 ) f ( n − i ) ( n − 1 i − 1 ) f(n)=\sum_{i=1}^nf(i-1)f(n-i){n-1\choose i-1} f(n)=i=1nf(i1)f(ni)(i1n1) 。因为要求字典序最小,所以从小到大枚举每个位置填什么,需要计算确定一个前缀的 turning permutation 有多少。同样,已经填了的数把没填的数分成若干个连续的段,每一段之间互不影响,任意一段要求长度为奇数,并且段中第一个数在第二个数的右边,因此方案数可以通过 f f f 数组和组合数计算出来。确定前缀后,计算一次方案数是 O ( n ) O(n) O(n) 的,但是按字典序枚举某个位置时只会将某个连续段划分为两段,因此也可以根据之前的答案 O ( 1 ) O(1) O(1) 计算,这样总复杂度可以做到 O ( n 2 ) O(n^2) O(n2)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1212798.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux高级篇基础理论一(详细文档、Apache,网站,MySQL、MySQL备份工具)

♥️作者:小刘在C站 ♥️个人主页: 小刘主页 ♥️不能因为人生的道路坎坷,就使自己的身躯变得弯曲;不能因为生活的历程漫长,就使求索的 脚步迟缓。 ♥️学习两年总结出的运维经验,以及思科模拟器全套网络实验教程。专栏:云计算技…

基于乌鸦算法优化概率神经网络PNN的分类预测 - 附代码

基于乌鸦算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于乌鸦算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于乌鸦优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神经网络的光滑…

go语言 | 图解反射(二)

reflect.Value 和 reflect.Type 反射有两种类型 reflect.Value 和 reflect.Type ,分别表示变量的值和类型,并且提供了两个函数 reflect.ValueOf 和 reflect.TypeOf 分别获取任意对象的 reflect.Value 和 reflect.Type。 reflect.Value reflect.Value 可…

Using Definition View 使用定义视图

You use Definition view to create definitions within a defined hierarchical structure, in which nodes represent the definitions. A node is the visual representation of a section, step, or action that you can select, collapse,modify, and so on. 您可以使用“…

JVM虚拟机——类加载器(JDK8及以前,打破双亲委派机制)(JDK9之后的类加载器)

目录 1.自定义类加载器2.线程上下文类加载器3.OSGi模块化4.JDK9之后的类加载器5.类加载器总结 1.自定义类加载器 ⚫ 一个Tomcat程序中是可以运行多个Web应用的,如果这两个应用中出现了相同限定名的类,比如Servlet类,Tomcat要保证这两个类都能…

nestJs(三) 数据库

真正的服务往往包括数据存储。 本篇将介绍如何建立 NestJs 的数据库连接、并使用数据库联表查询。这样就就是完整的后台服务了。 开发准备 下载并安装 Mysql创建 school 库 create database school;3.安装 nestjs/typeorm typeorm mysql2 npm install --save nestjs/typeor…

医学图像 开源数据整理合集1

本文为医学图像 开源数据整理合集,为科研数据提供方便和检索。 目录 1 NIH database of 100000 Chest X-rays 2 The Cancer Imaging Archive (TCIA) 3 National Institute for Mental Healths (NIMHs) OpenNeuro.org 4 RSNAs Quantitative Imaging Data Wareh…

css技巧分享(优惠券缺角样式实现)

主要知识点:radial-gradient radial-gradient() CSS 函数创建一个图像,该图像由从原点辐射的两种或多种颜色之间的渐进过渡组成。它的形状可以是圆形或椭圆形。函数的结果是 数据类型的对象。这是一种特别的 。 .coupon{width: 190rpx;height: 194rpx;b…

QGIS之二十栅格数据定义投影

效果 步骤 1、准备数据 2、定义投影 Qgis工具箱中搜索“投影” 指定投影坐标系,例如EPSG:4549 运行 3、结果 查看属性

炫酷爱心表白

一、代码 <!DOCTYPE html> <!-- saved from url(0051)https://httishere.gitee.io/notion/v4/love-name.html --> <html><head><meta http-equiv"Content-Type" content"text/html; charsetUTF-8"><title>&#x1f4…

Linux系统进程与进程间通信

Linux是一个多用户、多任务的操作系统&#xff0c;支持多个进程同时运行。进程是Linux系统中的基本单元&#xff0c;它们负责执行各种任务&#xff0c;如网页浏览、文件下载、程序运行等。在Linux中&#xff0c;进程是由一个或多个线程组成的&#xff0c;线程是进程的基本执行单…

VSCode配置MingW编译调试环境

1.MingW简介 MinGW&#xff0c;即 Minimalist GNU For Windows。它是一些头文件和端口库的集合&#xff0c;该集合允许人们在没有第三方动态链接库的情况下使用 GCC&#xff08;GNU Compiler C&#xff09;产生 Windows32 程序。 实际上 MinGW 并不是一个 C/C 编译器&#xf…

92 [递归实现指数型枚举](https://www.acwing.com/problem/content/94/)

从 1∼n1∼&#xfffd; 这 n&#xfffd; 个整数中随机选取任意多个&#xff0c;输出所有可能的选择方案。 输入格式 输入一个整数 n&#xfffd;。 输出格式 每行输出一种方案。 同一行内的数必须升序排列&#xff0c;相邻两个数用恰好 11 个空格隔开。 对于没有选任何…

Spring6(二):IoC容器

文章目录 3. 容器&#xff1a;IoC3.1 IoC容器3.1.1 控制反转&#xff08;IoC&#xff09;3.1.2 依赖注入3.1.3 IoC容器在Spring的实现 3.2 基于XML管理Bean3.2.1 搭建子模块spring6-ioc-xml3.2.2 获取bean方式一&#xff1a;根据id获取方式二&#xff1a;根据类型获取方式三&am…

大语言模型|人工智能领域中备受关注的技术

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️其他领域】 文章目录 前言关于大语言模型大语言模型是什么&#xff1f;大语言模型有什么用?文案写作知识库回答文本分类代码生成 AWS 如何通过 LLM 提供帮助&#xff1f;Amazon BedrockAmazon SageM…

anaconda中安装pytorch和TensorFlow环境并在不同环境中安装kernel

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

unity使用vs进行c#代码提示,查看F12unity元代码

unity关联vs 在vs中让cs.meta显示&#xff0c;鼠标右键&#xff0c;包含在内 提示GameObject类了 感谢下面这位的提示https://zhuanlan.zhihu.com/p/551119106

概率论和数理统计(四)方差分析与回归分析

前言 实际场景中,也需要研究两个变量的关系.检验也可能出现两个以上的总体. 方差分析 假设检验中&#xff0c;若需检验 H 0 : μ 1 μ 2 &#xff0c; H 1 : μ 1 ̸ μ 2 H_0:μ_1μ_2&#xff0c;H_1:μ_1 \notμ_2 H0​:μ1​μ2​&#xff0c;H1​:μ1​μ2​&#x…

MySQL(18):MySQL8.0的其它新特性

MySQL从5.7版本直接跳跃发布了8.0版本。 MySQL8.0 新增特征 1.更简便的NoSQL支持。 NoSQL泛指非关系型数据库和数据存储。随着互联网平台的规模飞速发展&#xff0c;传统的关系型数据库已经越来越不能满足需求。从5.6版本开始&#xff0c;MySQL就开始支持简单的NoSQL存储功能…

【计算机组成原理】绘制出纯整数(1字节)和纯小数的数轴

绘制出用原码、反码、补码表示纯整数(字节) 的数轴&#xff1a; 对于一字节的大小&#xff0c;原码和反码都只能表示255个数字&#xff0c;因为0占了2个符号数。而补码能表示256个数字&#xff0c;因为0和-0的补码是一样的。所以多出来一个符号数1000 0000能够表示-128所以&…