【B类竞赛】 第十二届蓝桥杯 省国赛经历

Now

上午比完了蓝桥杯,题目比去年省赛难好多,不亚于国赛难度(好歹去年国赛排名三十多)……
昨天在宿舍还跟hzy讨论了计算空间的问题,没想到第一题就考了。。
早晨跟zz路上讨论gcd问题,也算是考了吧。。
讨论什么考什么


省赛

A.空间:
32位是int。
4 ∗ x / 1024 / 1024 = 256 M B 4*x/1024/1024=256MB 4x/1024/1024=256MB ,求 x x x
找到计算器,列方程解出来了。
答案:67108864.

B.卡片:
模拟题,秒了。
答案:3181

C.直线:
很恶心求直线做的题,感觉今年题风突变,这不是很好的兆头。
第一反应枚举任意两点,求直线的斜率和截距。然后去重。
想用map,但是怕出现卡精度问题,
于是用结构体存一下,先用sort,先按斜率排序,再按截距排序
第一遍答案是 48000+的答案,感觉有点大,代入题目所给样例,没问题。
临比赛前一小时想起来设个eps试一下吧,结果答案突然减少至40257……
然后反复修改eps从 1 0 − 2 10^{-2} 102改到 1 0 − 7 10^{-7} 107,答案一直是 40257……
这时候突然想到这题用几何方法做是不是本来就是假做法,因为我想到了SDOI2008仪仗队。
答案:40257

D.货物摆放:
数太大,不敢 n \sqrt{n} n 枚举其因子。
这题第一反应是分解质因数,构成一个大集合,然后大集合分解成三个集合的并集,关键是如何分割,并没有很好的思路(枚举集合A的时候,集合B、C可能会出现重复,需要容斥去除,没想到怎么去。这题当时先pass了,做了大题之后重新思考的这道题。
先打了一个 n n n 1 1 1 32 32 32 的表,然后挑出 n = 2 , 4 , 8 , 16 , 32 n=2,4,8,16,32 n=2,4,8,16,32 的点看了一下,发现其答案分别是 3 , 6 , 10 , 15 , 21 3, 6, 10, 15, 21 3,6,10,15,21,这是 1 1 1 i i i 的前缀和。这些数都是 2 2 2 的若干次幂
懂了,质因子贡献的答案是独立的,我可以先算出 2021041820210418 2021041820210418 2021041820210418 每个质因子的次幂,然后这些次幂对应的 上 述 的 前 缀 和 上述的前缀和 的乘积就是答案!
2021041820210418 = 2 1 ∗ 3 3 ∗ 1 7 1 ∗ 13 1 1 ∗ 285 7 1 ∗ 588235 3 1 2021041820210418 = 2^1 * 3^3 * 17^1 * 131^1 * 2857^1 * 5882353^1 2021041820210418=213317113112857158823531
n = 2 , 4 , 8 , 16 , 32 n=2,4,8,16,32 n=2,4,8,16,32 的表可以得 贡献的答案分别是 3 , 10 , 3 , 3 , 3 , 3 3,10,3,3,3,3 3,10,3,3,3,3
相乘得 3 5 ∗ 10 = 2430 3^5 * 10 = 2430 3510=2430
答案:2430

E.路径:
最短路模板,边权是 i ∗ j / g c d ( i , j ) i*j/gcd(i,j) ij/gcd(i,j),除了弗洛伊德都能眨眼跑出来。
答案:10266837

F.时间显示:
模拟题, 1 s = 1000 m s 1s=1000ms 1s=1000ms, 用 l o n g l o n g long long longlong模拟下就行。

G.砝码称重:
好像从哪见过这道题,是dp来着,忘了怎么做了(dp是我弱项)…
3 n 3^n 3n枚举放左放右,标记每一个可能的数值,用桶记录一下。
赛后想到正解,集合有不重复性,取值最多就2e5种(包括负数),然后每加进来一个数,集合中的数都对这个数相加或者相减,再丢到集合里就行了。考场上大意了。

H.杨辉三角形:
部分分有手就行。
看到 N取值1e9,没想到怎么做,最差情况枚举到 1e9,会超时,甚至数组存不下。
数组问题,可以发现当求到第 i i i 行第 j j j 列后, 如果其值大于 n n n,那么往后的项就不必求了,且递减序列的项也不必求了。杨辉三角某行可以由上一项地推过来,不必保存其上一行的数。
于是写了一个略大于 O ( n ) O(n) O(n) 做法,希望能多拿点分,我还是太菜了。
PS:
其他思路:
从上往下从左到右都有二分性质,但不知道如何利用。
或者用阶乘算值,但感觉应该不是正解……

四月底吧,脑子突然灵光一闪(闪的太慢了)。
N = C n m N = C_{n}^{m} N=Cnm 考虑 N N N 的取值范围只有 1 e 9 1e9 1e9。 根据组合数的数学构造可以发现 m m m 的取值范围特别小,大概 < = 20 <=20 <=20, 于是考虑枚举m,然后根据杨辉三角从上往下的递增性对 n n n 进行二分。时间复杂度大概是 O ( m 2 ∗ l o g 2 N ) O(m^2*log_2N) O(m2log2N) 第一次 m m m 是枚举,第二次 m m m 是算组合数。

I.双向排序
模拟暴力sort,大概能拿一半分,能拿多少分拿多少吧,进了国赛再冲刺,现在求稳。
不过赛后听说是个签到题,不过也无所谓了,像去年一样稳住省一就行了,国赛另谈。

J.括号序列
想到一个线段树维护前缀和 并求区间极值判断合法性 的做法,但是还是会T掉,pass了。


省赛后总结

我个人觉得难度不亚于去年年底的国赛……
感觉这次省赛应该会比去年省赛三十多名的成绩要差,
下周天梯赛再接再厉吧,
最重要的比赛还是5月中旬的icpc,加油吧…


省赛后至今(2021.04.28)

跟教练吵了一架,挽回也挽不回了,银川站不让我去打了
今晚(2021.04.28) 蓝桥省赛结果出来了。
山东省rk16,比预想的又高了挺多。
国赛加油呗


新的一年

第十二届蓝桥杯国赛是我不愿意面对的一个回忆,
国赛的疏忽把我从国一的位置拉到了国二,
没想到第一次蓝桥杯拿下的国一在第二次却变成了国二……
A.带宽
【B类竞赛】 第十二届蓝桥杯 省国赛经历_第1张图片

大二时候的自己还不清楚计算机的进制转换,
以为都是以2^10=1024进行单位换算,
于是这题我算了个小数点后好几位的答案,
正确答案是25(200/8就好了)
B.纯质数
【B类竞赛】 第十二届蓝桥杯 省国赛经历_第2张图片
枚举数字1到20210605,
先判断包含的数字是否全是由质数组成,
是的话再进行 s q r t ( n ) sqrt(n) sqrt(n) 的质数判断,
注意两者判断顺序,如果先判断后者再判断前者必定超时。

C.完全日期
【B类竞赛】 第十二届蓝桥杯 省国赛经历_第3张图片
注意闰年,然后构造日期,再把各位上的数加起来。
题目不难。
D.最小权值
【B类竞赛】 第十二届蓝桥杯 省国赛经历_第4张图片
不会

E.大写
【B类竞赛】 第十二届蓝桥杯 省国赛经历_第5张图片
本来是第五个填空的,但今年只有四个填空,六个大题。
送分题 不多说。

F.123
【B类竞赛】 第十二届蓝桥杯 省国赛经历_第6张图片
难度从这道题开始加大,样例规模也成倍上升。
传统枚举方法拿不到一半的分
注意考虑优化:答案可以表示为区间 [ 1 , r ] [1, r] [1,r] - [ 1 , l − 1 ] [1, l-1] [1,l1] 的差。
那么如何统计 [ 1 , r ] [1, r] [1,r] 的答案呢?
设函数 P ( x ) = 0 + 1 + 2 + . . . + x P(x) = 0 + 1 + 2 + ... + x P(x)=0+1+2+...+x
再设函数 S ( x ) = P ( 0 ) + P ( 1 ) + P ( 2 ) + . . . + P ( x ) S(x) = P(0) + P(1) + P(2) + ... + P(x) S(x)=P(0)+P(1)+P(2)+...+P(x)
那么 [ 1 , r ] [1, r] [1,r]的和就可以用 S ( t 1 ) + P ( t 2 ) S(t_1) + P(t_2) S(t1)+P(t2)表示出来, [ 1 , l − 1 ] [1, l-1] [1,l1]也同理。
问题的求解就变成了如何求解出上式的 t 1 和 t 2 t_1和t_2 t1t2.
不难发现, t 1 t_1 t1对应的项数是确定的,当 t 1 t_1 t1增大时,对应的项数是增加的。
那么可以用二分算法进行 t 1 t_1 t1的确定。
因此我们只需要知道最大的 t 1 t_1 t1,使得 P ( 1 ) , P ( 2 ) . . . P ( t 1 ) P(1),P(2)...P(t_1) P(1),P(2)...P(t1)转化成的 $(1)+(1+2)+(1+2+3)+…+(1+2+…+t1)中的项的个数 < = r <=r <=r,项的个数其实就是 t ∗ ( t + 1 ) / 2 t*(t+1)/2 t(t+1)/2,那么剩余项的个数就是 t 2 = r − t ∗ ( t + 1 ) / 2 t_2=r-t*(t+1)/2 t2=rt(t+1)/2
此时 S ( t 1 ) + P ( t 2 ) S(t_1) + P(t_2) S(t1)+P(t2)便确定下来了。

G.异或转换
【B类竞赛】 第十二届蓝桥杯 省国赛经历_第7张图片
虚张声势的一道题,只要你构造的样例足够多,
你会发现这题的循环节在 2 n 2^n 2n上,
根据结论去写答案就可以了。

H.二进制问题
【B类竞赛】 第十二届蓝桥杯 省国赛经历_第8张图片
N的取值范围是 1 0 18 10^{18} 1018,但转化成二进制不过只有64位。
对N的高位开始进行搜索,
如N的某位是1,那么(1)该位构造可以为0,然后剩余位数都可以用剩余数量的1进行填充(预处理好组合数就可以快速进行运算),计算完之后可以进行(2)。(2)该位可以构造为1,然后进行下一位判断。
具体实现存在一点细节上的问题,比如剩余位的数量必须大于等于你当前可以填1的数量。具体不再赘述,懂思路即可。
I.翻转括号序列
【B类竞赛】 第十二届蓝桥杯 省国赛经历_第9张图片
不会,部分分也不会写。
J.异或三角
【B类竞赛】 第十二届蓝桥杯 省国赛经历_第10张图片
只会暴力枚举的部分分做法。


对了对填空题答案,只对了一个第二题……
前三次省赛国赛里填空题从来没有因为写错而扣过分,
而本次填空题挂惨了,都是因为写挂……
也因为前几次比赛经历太自信了,导致也没检查填空题答案。
大题做的应该还好,最终只得了排名全国近200名的国二……

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