这些月赛的题目名字我就不写了,如果需要请自行查看核对。我只陈列月赛的场数。
代码见题解篇。
用了比较长的时间,但起码最终这些题在没有看题解的情况下自己做完了。也算是,AK了吧~~
月赛1
A
一句固定的代码,背就完事
#include<iomanip>
cout << fixed << setprecision(r) <<res<< endl;
B
考的和第一题是一个知识点,没啥可记的~
C
当交了一遍WA了之后,我陷入了沉思(这题难道题目我没有理解么??内心疯狂os)
题意事实上,也的确上,我没有理解错。就是简简单单的,元宵种类数的碗数次方。
之所以WA是因为元宵种类的数据过于庞大,需要进行快速幂的一开始就得先模一下。
是的,第一次写的计算公式是
qmi(a*b,c*d,mod)
,这么写就欠WA。
应该循序渐进,
LL tmp =qmi((a %mod) * (b %mod) %mod ,c , mod) ;
LL res = qmi(tmp , d , mod);
自然从数学上讲,上面是一样的。稳妥起见,以后再遇到了长点记性吧~
D
他要不是小白月赛,我会以为他考我FFT。
还好数据量只有500,暴力n2就OK了~
偶对,当然FFT也是可以AC的。FFT适用于十万的数据量。杀鸡用牛刀了。
FFT代码见进阶课FFT。
E
这个没用公式去证明,那就太费时间了。用的猜想。
首先题目只给出了半径R,那就说明最终答案只和R有关。其实想想也是么,使答案最大的三角形形状一定是被固定的。
其次分析,答案方程的组成结构,前半部分是轮换对称的,但是最后一项$sinA$打破了这一平衡。显然,三角形的度数,一大部分拨给了$A$。那么其他两个角呢?BC的身份仍然对等,不妨我们假设这是$A=90°B=45°C=45°$的三角形。验证一下猜想。
$res = tan(π/8)\*tan(π/8)+2*tan(π/8)+r$
抛开r不看,计算其余部分
因为$tan^{2}\alpha = 1- \frac{2tan\alpha}{tan2\alpha}$
所以原式可以抽象成,$2tan\alpha+1-\frac{2tan\alpha}{tan2\alpha}$,带入$\alpha=8/π$,最终$res = 1 + r$
$QED$
F
这道题我WA了一页。心酸。
第一次我先一个图一个图进行遍历的。然后T了。
第二次我决定for三重循环遍历全部的答案,内存超限。
第三次我把全部的数组优化掉了一维,用的bitset.然后超时了。
第四次,脑子才反应过来,没必要for三重循环,直接在输入的时候进行答案存储就可以了。最终AC。
G
这道题目是数字三角形的变形,这个结论很容易得出。使用数字三角形的DP解法就可以了。
但是对数字三角形进行存储的时候,就用了八十多行。
给一个建议,做数字三角形题目的时候,在原数组上直接进行DP,不用再去开一个f数组去存状态了。一是没有必要,二是为初始化带来不必要的麻烦(因为f数组需要做和元素数组一样的初始化)。
H
还好我有点乐理基础哈😹
这道题目没有给出每一个音名在五线谱上的对应,如果丁点不懂的话那一定是送了。
原理是,五线谱,从最下的那条线,是E
,每半间变一个音名。到G
重轮回’A’。
我想我已经写得很通俗了😹😹
然后解题技巧是,按每列枚举字符串。就没啥了~
I
一个无深度限制的栈,给定一个序列,第一个元素不可以第一个出栈,求出合法出栈排列数。
拿来一看,太经典了,一个无深度限制的栈,给定一个序列,求出合法出栈的排列数。
这经典的问的卡特兰数呢。但是多了一个条件,说第一个不可以第一个出栈。简单的变形,意思是Cattelan(n)-Cattelan(n-1)就是答案。Cattelan(n-1)就是第一个元素开头的卡特兰数方案数。
思路比较简单,虽然我先去复习了一下卡特兰数的公式去了
因为$Cattelen(n) = \frac{1}{n+1}\frac{2n!}{n!n!}$ ,貌似用求逆元的方式求出组合数,算出两个卡特兰数一减就行,但是不要忘了这里面涉及求模的运算。直接减的话,会有答案得出负数的情况(由于取模,Cattlelan(n)求模之后可能小于Cattelan(n-1)的求模结果)。所以我们需要重写公式。
过程省略了。下面直接给出答案。
$res = infac(n) * {\textstyle \prod_{n+2}^{2n-2}} * (3n^{2}-3n)$
其中infac(n)
是n的阶乘的逆元。换句话说,就是
$res = \frac{1}{n!} * {\textstyle \prod_{n+2}^{2n-2}} * (3n^{2}-3n)$
$QED$
J
啊,这就记录一下匹配的键值对就好啦。map解决。