P8865 种CCF花 前缀套前缀
太笨了码了两天,放个代码就跑路了,以后看吧
https://www.luogu.com.cn/problem/P8865
#include <bits/stdc++.h>
using namespace std;
typedef long long int LL;
char ch;
LL T,id,n,m,c,f,MOD=998244353,temp,jpre[1005][1005],ipre[1005][1005],s,vc,vf,maps[1005][1005],sum_c[1005][1005],sum_f[1005][1005];
int main() {
cin>>T>>id;
while(T--)
{
memset(jpre,0,sizeof(jpre));
memset(ipre,0,sizeof(ipre));
memset(maps,0,sizeof(maps));
memset(sum_c,0,sizeof(sum_c));
memset(sum_f,0,sizeof(sum_f));
cin>>n>>m>>c>>f;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
while(!isdigit(ch=getchar()));
temp=ch-'0';
maps[i][j]=temp;
}
}
for(int i=1;i<=n;i++)
{
for(int j=m-1;j>=1;j--)
{
if(maps[i][j]==0&&maps[i][j+1]==0) jpre[i][j]=jpre[i][j+1]+1;
}
}
for(int j=1;j<=m-1;j++)
{
for(int i=n-1;i>=1;i--)
{
if(maps[i][j]==0&&maps[i+1][j]==0) ipre[i][j]=ipre[i+1][j]+1;
}
}
for(int sj=1;sj<=m-1;sj++)
{
for(int si=n;si>=1;si--)
{
if(maps[si][sj]==1) continue;
sum_c[si][sj]=jpre[si][sj]+sum_c[si+1][sj];
sum_c[si][sj]%=MOD;
if(si==n) continue;
sum_f[si][sj]=jpre[si][sj]*ipre[si][sj]+sum_f[si+1][sj];
sum_f[si][sj]%=MOD;
}
}
for(int sj=1;sj<=m-1;sj++)
{
for(int si=1,leng=1;si<=n-2;si++)
{
leng=ipre[si][sj]+1;
if(leng<3) continue;
int ba=jpre[si][sj];
if(ba<=0) continue;
vc+=ba*sum_c[si+2][sj]%MOD;
vc%=MOD;
if(leng>=4)
{
vf+=ba*sum_f[si+2][sj]%MOD;
vf%=MOD;
}
}
}
cout<<vc*c<<" "<<vf*f<<endl;
vc=0,vf=0;
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架