| 记录编号 |
581717 |
评测结果 |
AAAAAAAAAAAAAAAA |
| 题目名称 |
3811.[NOIP 2022]种花 |
最终得分 |
100 |
| 用户昵称 |
┭┮﹏┭┮ |
是否通过 |
通过 |
| 代码语言 |
C++ |
运行时间 |
1.891 s |
| 提交时间 |
2023-08-10 20:09:38 |
内存使用 |
34.58 MiB |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int N = 1100,mod = 998244353;
int T,id,n,m,C,F;
long long r[N][N],c[N][N],f[N][N],ansc,ansf;
bool v[N][N];
char ch;
void first(){
ansc = ansf = 0;
memset(r,0,sizeof(r));
memset(v,0,sizeof(v));
memset(c,0,sizeof(c));
memset(f,0,sizeof(f));
}
void init(){
scanf("%d%d%d%d",&n,&m,&C,&F);
for(int i = 1;i <= n;i++){
for(int j = 1;j <= m;j++){
cin>>ch;
v[i][j] = (ch == '1');
}
}
}
int main(){
freopen("plant.in","r",stdin);
freopen("plant.out","w",stdout);
scanf("%d%d",&T,&id);
while(T--){
first();
init();
for(int i = 1;i <= n;i++){
r[i][m+1] = -1;
for(int j = m;j >= 1;j--){
if(!v[i][j])r[i][j] = r[i][j+1]+1;
else r[i][j] = -1;
}
}
for(int j = 1;j <= m;j++){
for(int i = n;i >= 1;i--){
if(!v[i][j])c[i][j] = (r[i][j] + c[i+1][j]) % mod;
}
}
for(int j = 1;j <= m;j++){
int k = 0;
for(int i = n,k = n;i >= 1;i--){
if(!v[i][j])f[i][j] = ((r[i][j] * (k-i)) % mod + f[i+1][j]) % mod;
else k = i-1;
}
}
for(int i = 1;i <= n-2;i++){
for(int j = 1;j <= m;j++){
if(!v[i+1][j] && !v[i][j]){
ansc = (ansc + (r[i][j] * c[i+2][j]) % mod) % mod;
ansf = (ansf + (r[i][j] * f[i+2][j]) % mod) % mod;
}
}
}
printf("%lld %lld\n",ansc*C,ansf*F);
}
return 0;
}