因为上篇AGC的写的有点长……估计这篇也短不了所以放个一句话题解方便查阅啥的吧QwQ
具体的题意代码题解还是往下翻……
ARC 058
D:简单容斥计数。
E:用二进制表示放的数字,然后状压$DP$。
F:$biset$优化$DP$预处理,乱搞贪心。
ARC 059
D:傻题,存在长的合法子串就一定会存在短的。
E:前缀和优化$DP$。
F:每个长度为$len$的串出现的概率是相同的,求到长度为$len$的方案数然后除$2^{len}$。
ARC 060
D:对$b$分大于根号和小于根号讨论。
E:倍增预处理一个点往右跳$2^i$步后到哪里。
F:$KMP$找循环节。
ARC 061
D:开个$map$直接搞。
E:拆点最短路。
F:组合计数好题。
ARC 062
D:显然交错出是最优的。
F:对点双是否为环讨论一下,组合数+$Polya$计个数。
ARC 063
F:发现答案一定过$y=\frac{h}{2}$或者$x=\frac{w}{2}$,用单调栈和线段树维护一下答案。
ARC 064
F:枚举以$x$的回文串作为原串的循环节,简单容斥一下再分奇偶讨论。
ARC 065
F:设$f[i][j]$表示到了第$i$个位置,可用的$1$还有$j$个。
ARC 066
D:数位$DP$+小$trick$。
E:结论+$DP$。
ARC 068
E:调和级数+反向思维,树状数组维护。
F:性质+$DP$。
ARC 069
F:二分+$2-SAT$+线段树优化建图。
ARC 073
E:分类讨论最大最小值颜色,用$multiset$维护。
ARC 058
D - Iroha and a Grid
题意:
给你一个$H \times\ W$的矩形,左下角有一个$A \times B$的矩形不能走。
只能向右向下走,问从左上角走到右下角的方案数。
题解:
简单容斥,答案为总方案数减去经过左下角矩形的方案数。枚举左下角矩形从哪个位置进入,组合计数一下就好了。
1 #include<bits/stdc++.h> 2 #define N (200009) 3 #define LL long long 4 #define MOD (1000000007) 5 using namespace std; 6 7 LL inv[N],fac[N],facinv[N]; 8 LL h,w,a,b; 9 10 void Init() 11 { 12 fac[0]=facinv[0]=inv[1]=1; 13 for (int i=1; i<=200000; ++i) 14 { 15 if (i!=1) inv[i]=(MOD-MOD/i)*inv[MOD%i]%MOD; 16 fac[i]=fac[i-1]*i%MOD; facinv[i]=facinv[i-1]*inv[i]%MOD; 17 } 18 } 19 20 LL C(LL n,LL m) 21 { 22 if (n<m) return 0; 23 return fac[n]*facinv[m]%MOD*facinv[n-m]%MOD; 24 } 25 26 int main() 27 { 28 Init(); 29 cin>>h>>w>>a>>b; 30 LL ans=C(h+w-2,h-1); 31 for (int i=1; i<=b; ++i) 32 ans=(ans-C(h-a-1+i-1,i-1)*C(a-1+(w-i),a-1)%MOD)%MOD; 33 cout<<(ans+MOD)%MOD; 34 }View Code