NOIP模拟9

#rank3,开心

话说这次考试时,心态并不是很好,考试前一天看了DeepinC大佬的博客,上次他rank15就

感觉炸成那样,那我上次rank30算什么?反正内心虚得一比;昨天晚上做梦梦到自己模拟赛倒数,

起床后很慌,早上到了之后没心情打题,颓了一会博客,早上饭也没好好吃,知道这次达哥出题;

回来后感觉只能打暴力,考前一直在颓博客,学卡常,忽然发现已经开考2min了,旁边cbx已经在

看题了,我急忙打开题,先扫一遍,果然是达哥的题,连暴力都不会打。。。卡常白学了。。。

按顺序来,T1先骗到20分,然后就整不动了,看T2,t==0时想到以前做的概率充电器,t==1时

就只想到了高斯消元。打上去以为能得60分,结果t==0时式子推错,只拿到了消元的30。

看T3时还剩1.5h,发现第二种情况是一个裸的卡特兰数,第一种情况是一个裸的组合数,然后

开始想第3,4种情况,上个厕所,回来后想到了第4种情况的实现方法,然后想第3种,发现只剩

了半个多小时,n<=1000,觉得可能要是个n2的dp,但是打表肯定能过,纠结了一下选择了dp

然后开始推式子

 1 void work()
 2 {
 3     int ans=0;
 4     f[2]=4;
 5     for(int i=4;i<=n;i+=2)
 6     {
 7         f[i]=4ll*cat(i>>1)%mod;
 8         for(int j=i-2;j;j-=2)
 9         {
10             f[i]+=3ll*f[j]%mod*cat((i-j)>>1)%mod;
11             f[i]=f[i]>=mod?f[i]-mod:f[i];
12         }
13     }
14     printf("%d
",(f[n]+mod)%mod);
15 }
式子::::::::

发现:因为只能在坐标轴上移动,分为上下左右四个轴,我们只考虑最后一个轴:若始终不改变轴,则就是一个裸的卡特兰,

所以初始化为Cat(n/2)*4,之后从前面转移时要考虑重复的情况,要保证最后一个轴和倒数第二个轴不重复,所以乘的时候不

能乘4,而要乘3,枚举最后一个轴的步数,加起来即可;

想到后赶紧打上去,A掉T3,开心

原文地址:https://www.cnblogs.com/loadingkkk/p/11256882.html