NOIP2022T1题解
[NOIP2022] 种花(民间数据)
题目描述
小 C 决定在他的花园里种出
花园可以看作有
一种种花方案被称为
一种种花方案被称为
样例一解释中给出了
现在小 C 想知道,给定
对于所有数据,保证:
题解
观察数据范围,考虑
因为
可以这样考虑,对于每一个左上角,需要往右和往下伸展,那么不妨用
设
//预处理S1
for(int y=1;y<=m;y++){
for(int x=n;x;--x){
if(a[x][y]==1)s2[x][y]=-1;
else s2[x][y]=s2[x+1][y]+1;
}
}
//预处理S2
for(int x=1;x<=n;x++){
for(int y=m;y;--y){
if(a[x][y]==1)s1[x][y]=-1;
else s1[x][y]=s1[x][y+1]+1;
}
}
那么考虑如何才能对一个点求出所有合法的
接着扩展到
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
#define N 1050
#define p 998244353
int n,m,f1,f2,a[N][N],s1[N][N],s2[N][N],s3[N][N],s4[N][N],T,id;
int main(){
ios::sync_with_stdio(false);
cin>>T>>id;
while(T--){
memset(s1,-1,sizeof s1);
memset(s2,-1,sizeof s2);
memset(s3,0,sizeof s3);
memset(s4,0,sizeof s4);
cin>>n>>m>>f1>>f2;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
char x;
cin>>x;
a[i][j]=x-'0';
}
}
//预处理S1
for(int y=1;y<=m;y++){
for(int x=n;x;--x){
if(a[x][y]==1)s2[x][y]=-1;
else s2[x][y]=s2[x+1][y]+1;
}
}
//预处理S2
for(int x=1;x<=n;x++){
for(int y=m;y;--y){
if(a[x][y]==1)s1[x][y]=-1;
else s1[x][y]=s1[x][y+1]+1;
}
}
//预处理S3
for(int y=1;y<=m;y++){
for(int x=n;x;--x){
if(a[x][y]==1)s3[x][y]=0;
else s3[x][y]=s3[x+1][y]+s1[x][y];
}
}
//预处理S4
for(int y=1;y<=m;y++){
for(int x=n;x;--x){
if(a[x][y]==1)s4[x][y]=0;
else s4[x][y]=(1ll*s4[x+1][y]+1ll*s1[x][y]*s2[x][y])%p;
}
}
//
int ans1=0,ans2=0;
for(int x=1;x<=n-2;x++){
for(int y=1;y<=m;y++){
if(a[x][y]==1)continue;
ans1=(1ll*ans1+1ll*s1[x][y]*s3[x+2][y]*(a[x+1][y]!=1)%p)%p;
ans2=(1ll*ans2+1ll*s1[x][y]*s4[x+2][y]*(a[x+1][y]!=1)%p)%p;
}
}
cout<<1ll*ans1*f1%p<<" "<<1ll*ans2*f2%p<<endl;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!