社区讨论
20分求调
P8865[NOIP2022] 种花参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @lo3ga7ki
- 此快照首次捕获于
- 2023/10/24 06:09 2 年前
- 此快照最后确认于
- 2023/10/24 06:09 2 年前
rt
CPP#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int p=998244353;
string str;
int T,n,m,c,f,id;
ll ans1,ans2,sum[1005],dp[1005],a[1005][1005],s[1005][1005];
int main()
{
scanf("%d%d",&T,&id);
while(T--)
{
ans1=0,ans2=0;
scanf("%d%d%d%d",&n,&m,&c,&f);
for(int i=1 ; i <= n ; ++i)
{
cin>>str;
int len=str.size();
for(int j=0 ; j < len ; ++j) a[i][j+1]=str[j]-'0',sum[j+1]=0,s[i][j+1]=0,dp[j+1]=0;
}
if(n <= 2)
{
printf("0 0\n");
continue;
}
for(int i=1 ; i <= n ; ++i)
{
for(int j=m ; j >= 1 ; --j)
if(!a[i][j]) s[i][j]=s[i][j+1]+1;
if(i == 1) continue;
for(int j=1 ; j <= m ; ++j)
{
if(a[i-1][j]) sum[j]=0,dp[j]=0;
else
{
if(s[i][j])
{
ans1=(ans1+(s[i][j]-1)*sum[j]%p)%p;
ans2=(ans2+dp[j]%p)%p;
dp[j]=(dp[j]+(s[i][j]-1)*sum[j]%p)%p;
}
sum[j]=(sum[j]%p+max(0ll,s[i-1][j]-1)%p)%p;
}
}
}
printf("%lld %lld\n",ans1*c%p,ans2*f%p);
}
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...