因为上篇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
View Code

相关文章: