「NOI Online 2022 入门组」赛后总结

作者分享了参加编程竞赛的经历,从解决循环和选择结构的简单问题,到面对涉及质因数分解和动态规划的复杂题目。在第二题中,通过推导和优化算法解决了时间复杂度问题,而在第三题动态规划的处理上遇到了困难,尽管最终找到解题思路。文章强调了数学和算法在竞赛中的重要性,并表示将在动态规划方面进行进一步学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

如有笔误和错误,欢迎给位 dalao 指出。

赛时游记

14.00 开始下载题目。

14.02 打开题目。

14.02 ~ 14.30 看第一题,发现就是一个循环结构+选择结构,秒切+检查。

14.31 ~ 16.30 打开第二题,直觉想到由于 gcdgcdgcd 以及那个 z=x×y×gcd⁡(x,y)z=x\times y \times \gcd(x,y)z=x×y×gcd(x,y) 等式,就开始分解质因数,后来发现 n\sqrt nn 算法要 TLE,所以开始推式子。

写废了 xxx 多张草稿纸,终于推出来一个奇奇怪怪的式子,然后用时间瓶颈为求 gcd⁡\gcdgcd 的算法把打样例过了。

但是当我发现我把 500005000050000 的大样例复制 101010 遍之后在本地开 O2 要跑 1.2 秒,于是又加了一个快读快写和一些小卡常。

16.31 ~ 17.40 开始看第三题,看到 答案要对 1e9+71e9+71e9+7 取模 以及数据范围就开始想 n3n^3n3 dpdpdp 做法。但是一直推了很久都没有想出来,所以决定打个暴搜了事。

17.40 ~ 18.00 把三个题目代码交了上去,然后开始验证正确性。然后发现我的第二题用了 unsigned long long 会出现玄学错误(好像出现了负数),所以便改成了 long long

At last100+100+35=235100+100+35=235100+100+35=235

各题总结

T1

这个题目比较水,就是把每个题目对的个数和错的个数记录下来,然后看是对还是错的个数多,哪个多就说明哪个是错还是对,最后在和题目给出的答案比较就行。

T2

典型的数学题。(看题目名称也知道)

题意就是给定 x,zx,zx,z 以及这个特别烦的等式 z=x×y×gcd⁡(x,y)z=x\times y \times \gcd(x,y)z=x×y×gcd(x,y),求 yyy 的最小值。显然,我们可以给出 yyy 的上界给他求出来,就是 z/xz/xz/x。(显然当 x%y≠0x\% y \not= 0x%y=0 该题无解。) 然后,我们可以发现,如果 y=z/xy=z/xy=z/x,那么为了让等式成立,我们就需要对右边的式子除以 gcd⁡(x,y)\gcd(x,y)gcd(x,y),那么接下里的问题就是如何让他除下去。显然,我们有两种方法让右边的式子的值变小,及只让 yyy 变小,或者让 gcd⁡(x,y),y\gcd(x,y),ygcd(x,y),y 都变小。为了让 yyy 的值越小,就要让 yyy 中不包含 gcd⁡(x,y)\gcd(x,y)gcd(x,y) 那一部分先除下来,然后再让 gcd⁡(x,y),y\gcd(x,y),ygcd(x,y),y 两者同时变小。注意一点,在同时变小的时候,gcd⁡(x,y)\gcd(x,y)gcd(x,y) 一除以 www,这个右边的式子就会除以 w2w^2w2,所以,如果右式无法整除除 w2w^2w2 就输出 -1

这个题还是耽搁了我很久来推式子的,确实是一个好的思维题。

T3

显然,看到这个取模,我们就能够轻松想到动态规划。(但考试为了作对这个题目,推了半天都没退出来,还让我忘记在打包搜的时候记忆化了!)既然有了官方题解,那我就在下面粗略的理一下思路。

dpi,j,kdp_{i,j,k}dpi,j,k 是当执行到第 iii 个操作时,左边有 jjj 个字符要被删掉,右边有 kkk 个字符要被删掉时方案数、显然,我们可以根据当前执行到的操作,来确定现在新出现的那个字符串的长度。假设其为 lenlenlen

如果 sis_isi 是 ‘-’

则我们要么删前面的,要么删后面的,则此时有状态转移:dpi,j,k=dpi−1,j+1,k+dpi−1,j,k+1dp_{i,j,k}=dp_{i-1,j+1,k}+dp_{i-1,j,k+1}dpi,j,k=dpi1,j+1,k+dpi1,j,k+1

如果 sis_isi 不是 ‘-’

  • k≥1k\ge 1k1 ,显然此时后面有要删的,则新加的字符也一定会被删掉:dpi,j,k=dpi−1,j−1,k+dpi−1,j,k−1dp_{i,j,k}=dp_{i-1,j-1,k}+dp_{i-1,j,k-1}dpi,j,k=dpi1,j1,k+dpi1,j,k1

  • k=0k=0k=0 则当前这个一定要和匹配之后才能加进去,及在 tlen−j=sit_{len-j}=s_itlenj=si 时,有状态转移 dpi,j,k+=dpi−1,j,kdp_{i,j,k}+=dp_{i-1,j,k}dpi,j,k+=dpi1,j,k

  • 如果 len=jlen=jlen=j 则加在后面的也可以被前面的删掉:dpi,j,k+=dpi−1,j−1,kdp_{i,j,k}+=dp_{i-1,j-1,k}dpi,j,k+=dpi1,j1,k

后记

总体来说,这次考试考得不是特别理想(dpdpdp 的转移方程还是没有推出来,这一块有待加强),不过数学题倒是做对了,希望可以继续保持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值