From b7d76322ab4edbd0effbd5cc1d8b527efd782c38 Mon Sep 17 00:00:00 2001 From: Zengtudor Date: Sun, 7 Sep 2025 17:04:20 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=9E=E7=8E=B0P8865=E9=A2=98?= =?UTF-8?q?=E7=9B=AE=E7=9A=84C=E5=92=8CF=E6=A0=BC=E5=BC=8F=E8=AE=A1?= =?UTF-8?q?=E7=AE=97=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加完整的解题代码,包括输入处理、动态规划计算和结果输出。主要功能包括: - 读取输入数据并初始化地图 - 计算每个位置的右侧和下侧可达范围 - 根据题目要求计算C和F格式的结果 - 输出最终计算结果 --- src/8/12/P8865.cpp | 6 --- src/9/7/P8865.cpp | 102 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+), 6 deletions(-) delete mode 100644 src/8/12/P8865.cpp create mode 100644 src/9/7/P8865.cpp diff --git a/src/8/12/P8865.cpp b/src/8/12/P8865.cpp deleted file mode 100644 index 432d071..0000000 --- a/src/8/12/P8865.cpp +++ /dev/null @@ -1,6 +0,0 @@ - - - -int main(){ - -} \ No newline at end of file diff --git a/src/9/7/P8865.cpp b/src/9/7/P8865.cpp new file mode 100644 index 0000000..6979060 --- /dev/null +++ b/src/9/7/P8865.cpp @@ -0,0 +1,102 @@ +#include +#include +#include +#include +#include +#include + +using ll = int64_t; +const ll mod = 998244353; + +#define p(v)do{\ + std::cout<<#v<<":\n";\ + for(ll i=1;i<=n;i++){\ + for(ll j=1;j<=m;j++){\ + std::cout<<(v)[i][j]<<' ';\ + }\ + std::cout<<"\n";\ + }\ +}while(0) + +int main(){ + std::iostream::sync_with_stdio(false); + std::cin.tie(nullptr); + + ll t,id; + std::cin>>t>>id; + while(t--){ + ll n,m,c,f; + std::cin>>n>>m>>c>>f; + static std::vector> map; + map.clear(); + map.resize(n+1,std::vector(m+1)); + for(ll i=1;i<=n;i++){ + static std::string s; + std::cin>>s; + ll idx=1; + for(char c:s){ + map[i][idx++]=c-'0'; + } + } + + static std::vector> rt; + rt.clear(); + rt.resize(n+1,std::vector(m+2)); + for(ll i=1;i<=n;i++){ + for(ll j=m;j>=1;j--){ + if(map[i][j]==0){ + rt[i][j]=(rt[i][j+1]+1)%mod; + } + } + } + // p(rt); + static std::vector> d; + d.clear(); + d.resize(n+2,std::vector(m+1)); + for(ll j=1;j<=m;j++){ + for(ll i=n;i>=1;i--){ + if(map[i][j]==0){ + d[i][j]=(d[i+1][j]+1)%mod; + } + } + } + // p(d); + ll ansc=0,ansf=0; + static std::vector> visc,visf; + visc.clear();visc.resize(n+1,std::vector(m+1)); + visf.clear();visf.resize(n+1,std::vector(m+1)); + for(ll i=1;i<=n-2;i++){ + for(ll j=1;j<=m;j++){ + if(rt[i][j]<=1 || rt[i+1][j]==0 || rt[i+2][j]==0){ + continue; + } + ll top = rt[i][j]-1; + // ll nansc = 0; + // ll nansf = 0; + ll bc=ansc,bf=ansf; + for(ll k=i+2;k<=n;k++){ + if(rt[k][j]==0)break; + if(rt[k][j]>1){ + // if(visc[i][j]){ + // ansc=(ansc+visc[i][j])%mod; + // }else{ + ansc=(ansc+top*(rt[k][j]-1)%mod)%mod; + visc[i][j]=((ansc-bc)%mod+mod)%mod; + // } + // if(visf[i][j]){ + // ansf=(ansf+visf[i][j])%mod; + // }else{ + ansf=(ansf+top*(rt[k][j]-1)%mod*(d[k][j]-1)%mod)%mod; + visf[i][j]=((ansf-bf)%mod+mod)%mod; + // } + // printf("C format i=%lld, j=%lld, k=%lld, nowc=%lld\n" + // ,i,j,k, ansc+=top*(rt[k][j]-1)); + // printf("F format i=%lld, j=%lld, k=%lld, nowf=%lld\n" + // ,i,j,k, ansf+= top*(rt[k][j]-1)*(d[k][j]-1)); + } + } + } + } + std::cout<