0%

CF-1031-C. Smilo and Minecraft(二维前缀和)

思路讲解

简单来说,就是第一次炸了以后还能存活下来的金块,一定能活下来。

那么形式化的理解就是说第一次炸完以后,剩下的空间就足够其他炸弹进行一些精细操作了。

然后枚举+二维前缀和,就可以用二维前缀和来求。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
FOR(i,1,N){
FOR(j,1,M){
Sum[i][j]=Sum[i-1][j]+Sum[i][j-1]+(G[i][j]=='g')-Sum[i-1][j-1];
}
}
ll ans=0;
FOR(i,1,N){
FOR(j,1,M){
if(G[i][j]=='.'){
ll xl=max(i-K+1,1ll),xr=min(i+K-1,N),yl=max(1ll,j-K+1),yr=min(M,j+K-1);
ll lans=Sum[xr][yr]+Sum[xl-1][yl-1]-Sum[xl-1][yr]-Sum[xr][yl-1];
ans=max(ans,Sum[N][M]-lans);
}
}
}

AC代码

https://codeforces.com/contest/2113/submission/325681423

心路历程(WA,TLE,MLE……)