联盟场-提高组-R4 ZYZSC-S-Round 7
QOJ7018 Insertion Sort原题链接Insertion Sort分析分讨的本质就是有问题的。如果继续容斥的话那就完蛋了。正确的式子就是a n s k ! × ( 1 C n − k 1 × C n − 1 1 ) ansk!\times(1C_{n-k}^{1}\times C_{n-1}^{1})ansk!×(1Cn−k1×Cn−11)就是相当于前k kk的全排后面的1 11是序列完全有序后面的相当于在剩下的n − k n-kn−k里挑一个然后插到剩下里面去做完了。所以我真的想到了吗可能吧不过确实少了一些东西吧……下次最好先打一个表哦我推出来……但是我插板的时候按照n nn来算了正解#includebits/stdc.h#defineintlonglongusingnamespacestd;intT;intn,k,p;signedmain(){// freopen(prefixsort.in, r, stdin);// freopen(prefixsort.out, w, stdout);cinT;for(intcs1;csT;cs){cinnkp;kmin(n,k);intans(1(n-k)*(n-1)%p)%p;for(inti2;ik;i){ansans*i%p;}coutCase #cs: ans%p\n;}}CF115D Unambiguous Arithmetic Expression原题链接Unambiguous Arithmetic Expression分析和我想的也差不多吧类似一个递归就是说你会发现一坨符号会影响之后的一坨数。也不全对。我场上看出来了……40 % 40\%40%就是说一旦出现* /相连就完蛋了。然后对于一段 - * /第一个是二元的其他都是一元的……反正就是这个意思吧你懂的。就是* /不能做单元的运算符。我们来设一个非常神奇的DP式子我们设d p i , j dp_{i,j}dpi,j表示填完前i ii个字符后的括号多出j jj个左括号的方案数。换句话说不就是要消耗j jj个双元吗考虑一边完全可以兼顾另外一边所以非常完美。那么转移完全是容易的直接d p i , j ∑ k j i d p i − 1 , k dp_{i,j}\sum\limits_{kj}^{i}{dp_{i-1,k}}dpi,jkj∑idpi−1,k正解#includebits/stdc.h#defineintlonglong#definemod1000003usingnamespacestd;constintN2005;string s;intdp[N][N];intn,a[N];signedmain(){freopen(expression.in,r,stdin);freopen(expression.out,w,stdout);cins;intm0;for(inti0;i(int)s.length();i){if(s[i]*||s[i]/){a[m]1;}elseif(s[i]||s[i]-){a[m]3;}elseif(s[i]0s[i]9){while(i1(int)s.length()s[i1]0s[i1]9)i;a[m]2;}}nm;for(inti1;in;i){if(a[i]1a[i-1]!2){cout0;return0;}}dp[0][0]1;for(inti1;in;i){if(a[i]!2)for(intj1;jn;j){dp[i][j]dp[i-1][j-1];}else{for(intjn;j0;j--){dp[i][j](dp[i-1][j]dp[i][j1])%mod;}}}coutdp[n][0];}CF2183F Jumping Man原题链接Jumping Man分析哦我是不是没看懂这题的题面那不补了LGP17427 [ICPC 2018 Xuzhou R] Rikka with An Unnamed Temple原题链接[ICPC 2018 Xuzhou R] Rikka with An Unnamed Temple分析我的暴力我的110 p t s 110pts110pts我们来学一下这个图上的DP吧。