GDKOI2023普及组游记

Day -6(3.4)

晚上打了场AtCoder, r a n k 1515 rank 1515 rank1515,切了5题,信心++。

打T5的时候心态不稳,没验证好复杂度就交了,错了7次,下次注意。

Day -5(3.5)

早上8点多就回校了,假期减了一天。

上午模拟赛,考得不好,pts和rk就不说了,信心–。

比赛补题地址

T1

签到题,枚举两个相同字母的位置,计算把这两个字母之间其他的字母扔出去的交换代价,在交换代价合规情况下找最大可能的连续相同字母大小。

T2

DP,分成五种情况讨论, f [ i ] [ 0 ] f[i][0] f[i][0]表示当前位置为’0’, f [ i ] [ 1 ] f[i][1] f[i][1]表示当前位置为’*‘, f [ i ] [ 2 ] f[i][2] f[i][2]表示当前位置为’2’, f [ i ] [ 3 ] f[i][3] f[i][3]表示当前位置为’1’左边有地雷, f [ i ] [ 4 ] f[i][4] f[i][4]表示当前位置为’1’右边有地雷。然后讨论各种情况的状态转移。

T3

一种神奇的题目,先在原序列中把每个连续上升子串内部标记成同一编号,然后讨论几种可能的修改情况:1)在该子串前方或后方修改一个,使其长度+1。2)如果两个连续子串之间可以通过修改前一个子串合并,那就合并。3)修改后一个子串。

T4

需要推一推,具体如下:

首先求平均数在 [ l , r ] [l,r] [l,r]等价于求平均数在 [ 1 , l ) [1,l) [1,l) [ 1 , r ] [1,r] [1,r]的数量,后者减去前者即为答案。

以区间 [ i , j ] [i,j] [i,j]的平均数为例,如果平均数需要满足这个性质,那么每个数减去 r r r后求和的值必须 ≤ 0 \leq 0 0

即为 a [ i ] − r + a [ i + 1 ] − r + … … + a [ i + j − 1 ] − r ≤ 0 a[i]-r+a[i+1]-r+……+a[i+j-1]-r \leq 0 a[i]r+a[i+1]r+……+a[i+j1]r0.

b [ i ] = a [ i ] − r b[i]=a[i]-r b[i]=a[i]r,则 b [ i ] + b [ i + 1 ] + … … + b [ i + j − 1 ] ≤ 0 b[i]+b[i+1]+……+b[i+j-1] \leq 0 b[i]+b[i+1]+……+b[i+j1]0.

容易联想到前缀和,设 s [ i ] = Σ j ≤ i b [ j ] s[i]=\Sigma_{j \leq i} b[j] s[i]=Σjib[j],可得 s [ i + k − 1 ] − s [ i − 1 ] ≤ 0 s[i+k-1]-s[i-1] \leq 0 s[i+k1]s[i1]0,即 s [ i + k − 1 ] ≤ s [ i − 1 ] s[i+k-1] \leq s[i-1] s[i+k1]s[i1].

发现 i − 1 ≤ i + k − 1 i-1 \leq i+k-1 i1i+k1,所以求逆序对。

Day -4(3.6)

开始停课,第一次全天停。

上午提高难度模拟赛, 160 p t s 160 pts 160pts r a n k 1 rank 1 rank1,感觉良好,信心++。

改题可以看DengDuck's blog

比赛补题地址

T1

官方题解:

GDKOI2023普及组游记_第1张图片

其实只需要简单地证明一下,分析几种情况:

  • 两个序列 1 1 1的个数相同,但是顺序不同。例如: 101 101 101 110 110 110
    最后一位不一样,而 1 1 1的个数相同,这就意味着其他位置必定还有一个数位不同,所以对 2 2 2取模为 0 0 0
  • 两个序列 1 1 1的个数不同,例如: 001 001 001 110 110 110
    这时候我们去掉第二个数列的一个 1 1 1,并把第一个数列该位置的数也去掉,就变为了上一种情况,
    再加上一个不一样的,就变成了上一种情况,所以对 2 2 2取模为 1 1 1
  • 其他的可以以此类推扩展,具体看上面官方题解。

T2

官方题解:

GDKOI2023普及组游记_第2张图片

还有一个写的不错的题解:这里

个人思路

这里的斜边其实都对应了两条直角边,所以只要枚举出两条直角边的长度(以下用 a a a b b b表示)就可以得出这条斜边的长度。

再分析发现这条边上可供选择的点有 gcd ⁡ ( a , b ) − 1 \gcd(a,b)-1 gcd(a,b)1个(可以使用相似三角形证明,题解中此处有误),而我们需要从中选择 n − 2 n-2 n2个点(两个端点强制选),而相邻两个点的距离至少为 k k k,所以得到 C g + 1 − 2 k − ( n − 3 ) ( k − 1 ) n − 2 C_{g+1-2k-(n-3)(k-1)}^{n-2} Cg+12k(n3)(k1)n2(在 n n n个点中选出 m m m个点,并且两个点之间间隔至少为 k k k的方案数为 C n − ( m − 1 ) k m C_{n-(m-1)k}^{m} Cn(m1)km)。

T3

DengDuck的题解

关于T4

它超纲了。

期待周五ing。

Day -3(3.7)

停课的第二天,还是提高难度模拟赛。

本来:全部人 r a n k 5 rank 5 rank5,初二 r a n k 1 rank 1 rank1

因为计算错误和该死的Windows系统变成了:全部人 r a n k 9 rank 9 rank9,初二 r a n k 3 rank 3 rank3

信心–。

T1

期望简单题,可能需要点感性理解,继续挂上DengDuckの题解

T2

其实是 3 n + 1 3n+1 3n+1猜想(角谷猜想)的运用,知道了之后就简单多了,但是还要注意负数的情况。

T3,T4

待学习。

另外放上本地测试时遇到的神奇测试点:

GDKOI2023普及组游记_第3张图片

生地会考报名收走了身份证,这个问题不解决了有待解决。

Day -2(3.8)

成功躲过了月考

今日の教训:

我们不是数学竞赛 很多时候快速找到正解已经很不错了 不一定需要证明 打表都是可以的 实在不行再跑一些暴力验证一下 一定要灵活 我们不是数学竞赛\\ 很多时候快速找到正解已经很不错了\\ 不一定需要证明\\ 打表都是可以的\\ 实在不行再跑一些暴力验证一下\\ 一定要灵活\\ 我们不是数学竞赛很多时候快速找到正解已经很不错了不一定需要证明打表都是可以的实在不行再跑一些暴力验证一下一定要灵活

T1

一道简单 D P DP DP,设 f [ i ] [ j ] [ 0 / 1 ] f[i][j][0/1] f[i][j][0/1]表示前 i i i个数里使用了 j j j次修改, 0 0 0表示当前不是山谷, 1 1 1表示当前是山谷。

如果当前本来是山谷,那么转移如下:

f [ i ] [ j ] [ 0 ] = f [ i − 1 ] [ j ] [ 1 ] f[i][j][0]=f[i-1][j][1] f[i][j][0]=f[i1][j][1]

f [ i ] [ j ] [ 1 ] = f [ i − 1 ] [ j ] [ 0 ] + a [ i ] f[i][j][1]=f[i-1][j][0]+a[i] f[i][j][1]=f[i1][j][0]+a[i]

如果不是那么可以修改成山谷,转移如下:

f [ i ] [ j ] [ 0 ] = m a x ( f [ i − 1 ] [ j ] [ 0 ] , f [ i − 1 ] [ j ] [ 1 ] ) f[i][j][0]=max(f[i-1][j][0],f[i-1][j][1]) f[i][j][0]=max(f[i1][j][0],f[i1][j][1])

f [ i ] [ j ] [ 1 ] = f [ i − 1 ] [ j − 1 ] [ 0 ] + m i n ( a [ i − 1 ] , a [ i + 1 ] ) − 1 f[i][j][1]=f[i-1][j-1][0]+min(a[i-1],a[i+1])-1 f[i][j][1]=f[i1][j1][0]+min(a[i1],a[i+1])1

T2

手推一下可以得到以下结论:

n = 3 n=3 n=3时,答案为 a [ 1 ] − a [ 3 ] a[1]-a[3] a[1]a[3]

n = 5 n=5 n=5时,答案为 a [ 1 ] − 2 ∗ a [ 3 ] + a [ 5 ] a[1]-2*a[3]+a[5] a[1]2a[3]+a[5]

n = 7 n=7 n=7时,答案为 a [ 1 ] − 3 ∗ a [ 3 ] + 3 ∗ a [ 5 ] − a [ 7 ] a[1]-3*a[3]+3*a[5]-a[7] a[1]3a[3]+3a[5]a[7]

可以发现奇数情况下,系数均与杨辉三角有关。

如果直接 n 2 n^2 n2递推会超时,而杨辉三角又与组合数有关,所以可以通过公式法求解。

偶数情况可以通过一次操作转化为奇数。

T3、T4

待学习。

Day -1(3.9)

复习了一整天,但是复习的东西好像都没用上……

Day 0(3.10)

上午还是复习,下午三点坐车去广州,广州市区很堵,快五点才到酒店,然后去学校报到。

晚上去看广州塔了,喝了教练请的饮料。

复习了一会,又看了会电视就睡觉了。

Day 1(3.11)

上午听讲座,讲了一些数据结构。

下午比赛。

先想了第一题,感觉还行,打了一下才发现不对劲,朴素做法时间会炸。

想了一会没想到,就开了第二题,很快想到了宽搜,直接打了一份代码。

开了第三题,感觉很难,打了个表就跳了。

第四题也不会,打了个暴力,水20分。

又回头看第一题,想到了和正解差不多的思路,但是没算好空间,以为开不下数组,最后打出来的代码挂了。

晚上和 D e e p S e a S p r a y DeepSeaSpray DeepSeaSpray一起复习,和昨天一样看了会电视就睡觉了。

Day 2(3.12)

上午听讲座,宣传了中大、学习到了乱搞思想

然后就是令人激动的滚榜环节,发现自己前两题都挂了。

T1 T2 T3 T4 Total
估分 50 100 0 20 170
实际 30 80 0 20 130

差距有点大……压到了银牌线。

下午Day2比赛。

第一题看了一眼,直接切了。

第二题打了个暴力水分。

第三题还是不会。

第四题没想清楚,赛场上以为很简单……

吃完晚饭就回校了。

Day 3(3.13)

晚上去看了分数。

T1 T2 T3 T4 Total
估分 100 20 0 50 170
实际 100 20 0 30 150

还算不错,等排名,看看能不能保持住银牌。

总结与反思

总分 280 280 280,全省排名 54 54 54,拿下银牌。

下次要注意把问题分析清楚,还得计算好时间和空间复杂度,提升思维,争取更好的成绩。

你可能感兴趣的:(比赛总结,算法,GDKOI)