社区讨论

感觉思路没问题,但是1pts求助

P8865[NOIP2022] 种花参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@m2pkwsq0
此快照首次捕获于
2024/10/26 11:05
去年
此快照最后确认于
2025/11/04 16:06
4 个月前
查看原帖
CPP
#include<iostream>
#include<cstdio>
#include<cstring>

using std::ios;
using std::memset;
using std::cin;
using std::cout;

typedef long long ll;

const int maxn = 1010;
int mod = 998244353;

ll right[maxn][maxn], up[maxn][maxn], down[maxn][maxn];

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
    ll T, id;
    cin >> T >> id;
    while(T--){
        ll n, m, c, f;
        cin >> n >> m >> c >> f;
        ll vc = 0, vf = 0;
        char a[maxn][maxn] = {};
        memset(right, 0, sizeof(right));
        memset(up, 0, sizeof(up));
        memset(down, 0, sizeof(down));
        for(int i = 1; i <= n; i++){
            for(int j = 1; j <= m; j++){
                cin >> a[i][j];
            }
        }
        for(int i = 1; i <= n; i++){
            for(int j = m; j >= 1; j--){
                if(a[i][j] == '0') right[i][j] = right[i][j-1]+1;
                else right[i][j] = 0;
            }
        }
        for(int i = 3; i <= n; i++){
            for(int j = 1; j <= m; j++){
                if(a[i-1][j] == '1' || a[i-2][j] == '1' || a[i][j] == '1') continue;
                else up[i][j] = up[i-1][j] + right[i-2][j] - 1;//
                //if(a[i][j] != '1') down[i][j] = down[i-1][j] + 1;这是向上延伸
            }
        }
        for(int i = n; i >= 1; i--){
            for(int j = 1; j <= m; j++){
                if(a[i][j] != '1') down[i][j] = down[i+1][j] + 1;
                else down[i][j] = 0;
            }
        }
        for(int i = 1; i <= n; i++){
            for(int j = 1; j <= m; j++){
                vc = (vc + up[i][j] * (right[i][j]-1)) % mod;//
                vf = (vf + vc * (down[i][j]-1)) % mod;//
            }
        }
        cout << (c*vc%mod) << " " << (f*vf%mod) << "\n";
    }
    return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...