【UOJ】UER#3.B 开学前的日历

将条件转化为 i,j0,i+jk|Av+i,u+j+=(i+ji) i , j ⩾ 0 , i + j ⩾ k | A v + i , u + j + = ( i + j i ) , 考虑组合意义,从 (v,u) ( v , u ) 开始每次往右或往下走,走大于等于 k k <script type="math/tex" id="MathJax-Element-9">k</script>布的方案数,直接DP。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;
const int tt=998244353,maxn=306;
int n,m,q,f[maxn][maxn][maxn*2];
LL x0;
int rnd(){x0=(x0*100000005+20150823)%tt;return x0/100;}
int main(){
    freopen("B.in","r",stdin);freopen("B.out","w",stdout);
    scanf("%d%d%d%lld",&n,&m,&q,&x0);
    for(int i=1,v,u,k;i<=q;i++)v=rnd()%n+1,u=rnd()%m+1,k=rnd()%(n+m-v-u+1),f[v][u][k]++;
    for(int i=1;i<=n;i++)
     for(int j=1;j<=m;j++){
        (f[i+1][j][0]+=f[i][j][0])%=tt;(f[i][j+1][0]+=f[i][j][0])%=tt;
        for(int k=1;k<=n+m;k++)(f[i+1][j][k-1]+=f[i][j][k])%=tt,(f[i][j+1][k-1]+=f[i][j][k])%=tt;
     }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++)printf("%d ",f[i][j][0]);
        printf("\n");
    }
    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值