社区讨论

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 条回复,欢迎继续交流。

正在加载回复...