2020年十月蓝桥杯A组题目回忆&&口胡
更新:省一到手了,看来蓝桥杯虽然题目难,但是竞争还是不大的
一共五道填空和五道编程,前四道填空和前三道编程比较有把握,剩下的很虚,希望能进国赛orzzz
填空1
题意:输出1到2020之中,数字2出现了一共多少次。
题解:C语言及格就行;
填空2
题意:求分子和分母都在1到2020范围内的分数中,有多少个是既约分数(既约分数定义为分子分母的gcd为1)。
题解:C语言及格+会手写gcd就行;
填空3
题意:定义了这样一个蛇形走位的数阵,求第\(20\)行\(20\)列的数字是多少。
题解:当做初高中那种数学填空题,手算一些等差数列就可以了。
填空4
题意:给出一个电梯那种数字8,如下图所示,在7个笔画(横或竖)之间选择一些点亮,要求点亮的笔画组成恰好一个连通块,求方案数。
题解:可以建图暴力枚举\(2^7\)种情况然后bfs或dfs判断,也可以直接用排列组合的方法计算。
填空5
题意:\(20\)个圆和\(20\)条直线能把平面分成几部分。
题解:不会做,瞎写了个。
大题1
题意:给出\(n\)个学生的成绩,分别输出最高分、最低分、成绩均值(保留两位);
题解:C语言及格就行;
大题2
题意:首先介绍了八位数字表示日期,如2020年2月2日表示为\(20200202\),现在给出一个八位数字表示的日期,保证合法且年份在1000至8999之间,分别求该日期之后的第一个满足以下条件的日期的八位表示并输出(分别输出两个):
1、八位表示下是回文串的日期;
2、八位表示下是ABABBABA的日期。
题解:不整花活,老老实实写模拟,其实码量还行也不是很费时间,大概80+行?
大题3
题意:对于字符串\(s\),定义一个\(f(s)\)表示该串中出现恰好一次的字母的个数,现在给出一个字符串\(S\),串长\(10^5\),求其所有子串\(t\)的\(\Sigma f(t)\)。
样例:\(ababc\)输出\(21\)。
题解:感觉是CF上常见的题目,把问题由“一个串内出现一次的字母有多少个”转化为“某个字母在多少个串中出现一次”,然后统计一下每个字母出现的位置推一下公式就可以做了。
大题4
题意:给定平面内的一个椭圆(可能是斜的),并给出一个三角形,求三角形和椭圆的面积交,坐标绝对值在\(1000\)以内,结果允许\(0.01\)的绝对误差。
题解:据群友说正解应该是把椭圆先挪到原点再压成圆,把这样的变换矩阵也应用到三角形上,然后求三角形和圆的面积交(自适应辛普森?)就是答案,但我也不知道为啥这样可以保证面积不变。
我的瞎搞做法是,随便把三角形两条边当做一个斜坐标系的坐标轴,\(3000\)等分,因此可以得到\(3000^2\)个三角形里的点,然后求落在椭圆里的点的个数,除以\(3000^2\)在乘以三角形面积就当做答案。这么做在样例上精度似乎还不错,但考虑到坐标范围,感觉多半要凉呀。
大题5
题意:给定一个数字\(V(V\leq 10000)\),请你给出一个逆序数恰好为\(V\)的字符串,多个答案优先输出最短的,多个最短的优先输出字典序最小的。
题解:从样例可以猜出,答案字符串必须是非严格单调递减的,比如\(fedccba\)这样的,根据这个性质,只要枚举每个字符出现次数就可以唯一确定一个字符串。
这样对于\(50\%\)的数据\((V \leq 100)\) 可以发现串长不超过\(15\),所以就可以枚举各个字符出现次数,在\(C_{30}^{15}\)左右次运算得到答案,感觉有点慢,所以可以打个表。
\(100\%\)的做法不太会,但可以注意到\(100\%\)的串长也不超过\(200\),所以基于上面的性质想出一个科学可写的\(O(n^3)\)就可以过了(但我想不出来啊摔)。