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
然后开始推式子
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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\n",(f[n]+mod)%mod); 15 }
发现:因为只能在坐标轴上移动,分为上下左右四个轴,我们只考虑最后一个轴:若始终不改变轴,则就是一个裸的卡特兰,
所以初始化为Cat(n/2)*4,之后从前面转移时要考虑重复的情况,要保证最后一个轴和倒数第二个轴不重复,所以乘的时候不
能乘4,而要乘3,枚举最后一个轴的步数,加起来即可;
想到后赶紧打上去,A掉T3,开心