题目大意

给定一个n×mn\times m的网格图。有pp种颜色可以用来涂在网格中。
定义一个方案是不单调的,当且仅当任意两列网格图中的颜色种类数加起来超过qq种。
求不单调的方案数。

Data Constraint
n≤100,q≤p≤100,m≤109n\leq 100,q\leq p \leq 100,m\leq10^9

题解

每一列的方案显然只与它前一列的方案有关。
设f[i][j]f[i][j]表示做完前ii列,最后一列恰好选了jj种颜色的方案数。
那么f[i][k]+=f[i−1][j]∗trans[j][k]f[i][k] += f[i-1][j] * trans[j][k]。
现在要处理的就是trans[j][k]trans[j][k]了,这个可以预处理。
先枚举j,kj,k再考虑j,kj,k颜色集合的交集xx,trans[j][k]=Cxj×Ck−xp−j×Tjtrans[j][k] = C_{j}^{x}\times C_{p-j}^{k-x}\times T_j,其中TjT_j表示一列恰好放jj种颜色的方案。这个可以容斥一下:Tj=jn−∑j−1iTi×CijT_j=j^n-\sum_i^{j-1}T_i\times C_j^i
预处理出transtrans之后,再矩阵乘法一下即可。

SRC

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std ;#define N 100 + 10
typedef long long ll ;
const int MO = 998244353 ;
struct Matrix {ll Mat[N][N] ;
} trans , f , s , ret ;ll fac[N] , _fac[N] , T[N] ;
int n , m , p , q ;
ll ans ;Matrix operator * ( Matrix a , Matrix b ) {memset( ret.Mat , 0 , sizeof(ret.Mat) ) ;for (int i = 1 ; i <= p ; i ++ ) {for (int j = 1 ; j <= p ; j ++ ) {for (int k = 1 ; k <= p ; k ++ ) {ret.Mat[i][j] = (ret.Mat[i][j] + a.Mat[i][k] * b.Mat[k][j] % MO) % MO ;}}}return ret ;
}ll Power( ll x , int k ) {ll s = 1 ;while ( k ) {if ( k & 1 ) s = s * x % MO ;x = x * x % MO ;k /= 2 ;}return s ;
}ll C( int n , int m ) { return fac[n] * _fac[m] % MO * _fac[n-m] % MO ; }Matrix PowerM( int k ) {for (int i = 1 ; i <= p ; i ++ ) s.Mat[i][i] = 1 ;while ( k ) {if ( k & 1 ) s = s * trans ;trans = trans * trans ;k /= 2 ;}return s ;
}int main() {freopen( "color.in" , "r" , stdin ) ;freopen( "color.out" , "w" , stdout ) ;scanf( "%d%d%d%d" , &n , &m , &p , &q ) ;fac[0] = _fac[0] = 1 ;for (int i = 1 ; i <= max(n,p) ; i ++ ) {fac[i] = fac[i-1] * i % MO ;_fac[i] = Power( fac[i] , MO - 2 ) ;}for (int i = 1 ; i <= p ; i ++ ) {T[i] = Power( i , n ) ;ll sum = 0 ;for (int j = 1 ; j < i ; j ++ ) {sum = (sum + T[j] * C(i,j) % MO) % MO ;}T[i] = (T[i] - sum + MO) % MO ;}for (int i = 1 ; i <= min(n,p) ; i ++ ) {for (int j = 1 ; j <= min(n,p) ; j ++ ) {for (int x = max(i+j-p, 0) ; x <= min(i,j) ; x ++ ) {if ( i + j - x < q ) continue ;trans.Mat[i][j] = (trans.Mat[i][j] + C(i,x) * C(p-i,j-x) % MO * T[j] % MO) % MO ;}}}for (int i = 1 ; i <= p ; i ++ ) f.Mat[1][i] = C(p,i) * T[i] % MO ;f = f * PowerM( m - 1 ) ;for (int i = 1 ; i <= p ; i ++ ) ans = (ans + f.Mat[1][i]) % MO ;printf( "%lld\n" , ans ) ;return 0 ;
}

以上.

JZOJ4870. 涂色游戏相关推荐

  1. 【NOIP 模拟赛】平均数 涂色游戏 序列题解

    吐槽(完跪):神tmNOIP模拟赛,看到大题头根本高级数据结构什么的想都没想,结果死的很惨,第三题竟然要可持久化线段树,这NOIP我服了. 平均数: 这道题40分相信大家都能拿到,剩下的60分讲真考验 ...

  2. qduoj LC的涂色游戏(快速幂)

    题目链接:https://qduoj.com/problem/12/点击打开链接 LC的涂色游戏 发布时间: 2015年9月19日 21:42   时间限制: 1000ms   内存限制: 256M ...

  3. c语言写一个格子涂色的游戏,不一样的涂色游戏小程序,这个魔力贴贴涂色游戏有点意思...

    原标题:不一样的涂色游戏小程序,这个魔力贴贴涂色游戏有点意思 30000+游戏爱好者已加入我们! 沐沐带你发现好游戏! <魔力贴贴>游戏小程序好玩吗? <魔力贴贴>小游戏怎么玩 ...

  4. NOI Online #2 提高组 第一题:涂色游戏

    NOI Online #2 提高组 第一题:涂色游戏 前言 题目 解析 代码 前言 呦呵,这道题我竟然爆零了 而且我的暴力dfs死循环了!\bold{\Large\xcancel\text{而且我的暴 ...

  5. 【noip2016十连测round3】T3 涂色游戏 【矩阵快速幂优化dp】

    涂色游戏 题解: 推一推公式. 我们让f[i][j]表示第i列有j种颜色的方案总数,k表示i-1列用了多少种颜色,l表示第i列用了多少种没有在i-1列出现的颜色,G(i,j)表示i个格子涂j种颜色的方 ...

  6. qduoj LC的涂色游戏

    LC的涂色游戏 发布时间: 2015年9月19日 21:42   时间限制: 1000ms   内存限制: 256M 描述 LC是实验室传说级的大神,最近喜欢上了涂色游戏,现在纸上有n块空白区域,lc ...

  7. 橡皮擦的英语_从填字涂鸦到英语启蒙,家长口中的儿童版“秘密花园”涂色游戏测评【玩具测评】...

    #前情提要#丰富的拓展玩法让简单的穿珠游戏大不同,点击<手眼协调与数学启蒙,用线绳穿珠游戏促进能力发展>了解详情. 今天我们为大家带来了一篇绘画+英语启蒙学习玩具的测评报告.这款玩具是植绒 ...

  8. 涂色游戏color(【CCF】NOI Online 能力测试2 提高组第一题 )

    子序列问题sequence([CCF]NOI Online能力测试2 提高组第二题 ) 游戏match([CCF]NOI Online能力测试2 提高组第三题 ) 题目背景 1s 256M 题目描述 ...

  9. Java方格染色_C++实现涂色游戏(博弈)

    在一个2*N的格子上,Alice和Bob又开始了新游戏之旅. 这些格子中的一些已经被涂过色,Alice和Bob轮流在这些格子里进行涂色操作,使用两种涂色工具,第一种可以涂色任意一个格子,第二种可以涂色 ...

最新文章

  1. 图像分析:投影曲线的波峰查找
  2. 使用navicat 11 出现不能返回存储过程结果的问题
  3. hapi mysql项目实战路由初始化_用hapi.js mysql和nuxt.js(vue ssr)开发仿简书的博客项目...
  4. 案例代码:springboot+shiro配置同一用户多设备登录最大会话数
  5. Spark Streaming 遇到 kafka
  6. BI/数据仓库/数据分析 基础入门:一些常见概念解释
  7. 【Docker】docker bash: sudo: command not found
  8. android 系统应用在运行时被卸载
  9. MyBatis拦截器执行顺序
  10. ZYNQ图像处理(7)——sobel边缘检测
  11. Mysql-五种join类型
  12. 【NVMe2.0b 7】NVMe 基本队列数据结构
  13. ubuntu下的3D桌面.compiz
  14. 关于开机USB电涌15秒关机的另类解决方法
  15. 颜色恒常性CVPR2020 Multi-Domain Learning for Accurate and Few-Shot Color Constancy阅读笔记
  16. requests爬取豆瓣前250部高分电影
  17. 深度卷积对抗神经网络 基础 第六部分 缺点和偏见 GANs Disadvantages and Bias
  18. 鼠标经过图片 图片放大缩小
  19. 商城类小程序开发全过程(附源码)
  20. 修改云服务器端口,如何修改云服务器默认3389端口

热门文章

  1. 笔记,人工智能,梯度下降法
  2. 新书推荐 |《HTML 5与CSS 3权威指南(第4版•上下册)》
  3. QStyle/DTK重绘Qt-GUI已有控件,举例QScrollBar
  4. MipMap的设置及使用
  5. [从零学习汇编语言] -寄存器详解
  6. 自定义QGraphicsItem实现平移、改变尺寸和旋转
  7. 计算机视觉在工业和物流中的应用
  8. 计算机浮点数规格化表示
  9. Android studio中实现CANVAS(用JAVA绘制各种图形以及渐变动画)
  10. 行人重识别论文阅读2-视频中基于时空相关性和拓扑学习的行人重识别(CTL)