枚举$a$​​​和$b$​​​​​出现的次数,问题即求
$$
A_{i,j}=\sum_{p=0}^{L}\sum_{q=0}^{L-p}[n\mid (p-i)][n\mid (q-j)]{L\choose p}{L-p\choose q}(k-2)^{L-(p+q)}
$$
考虑单位根反演,即$[n\mid i]=\frac{\sum_{k=0}^{n-1}\omega^{ik}}{n}$​​(其中$\omega=g^{\frac{P-1}{n}}$​,$g$​为$P$​​的原根),代入后也即
$$
\sum_{p=0}^{L}\sum_{q=0}^{L-p}\frac{\sum_{x=0}^{n-1}\omega^{(p-i)x}}{n}\frac{\sum_{y=0}^{n-1}\omega^{(q-j)y}}{n}{L\choose p}{L-p\choose q}(k-2)^{L-(p+q)}
$$

将其整理并调换枚举顺序,即
$$
\frac{1}{n^{2}}\sum_{x=0}^{n-1}\sum_{y=0}^{n-1}\frac{1}{\omega^{ix}}\frac{1}{\omega^{jy}}\sum_{p=0}{L\choose p}(\omega^{x})^{p}\sum_{q=0}^{L-p}{L-p\choose q}(k-2)^{(L-p)-q}
$$
根据二项式定理,即
$$
\frac{1}{n^{2}}\sum_{x=0}^{n-1}\sum_{y=0}^{n-1}\frac{1}{\omega^{ix}}\frac{1}{\omega^{jy}}(\omega^{x}+{\omega^{y}}+k-2)^{L}
$$
类似于生成函数,考虑构造矩阵,即
$$
\begin{cases}X_{i,j}=Y_{i,j}=\frac{1}{\omega^{ij}}\\V_{i,j}=\frac{1}{n^{2}}(\omega^{i}+\omega^{j}+k-2)^{L}\end{cases}
$$
($i$​​和$j$​​的范围都是$[0,n)$​​,即矩阵大小为$n\times n$​​​)

根据式子不难得到$A=XVY$​,矩阵乘法计算即可

(另外关于$P$​的原根$g$​,不难暴力得到$g=13$成立)

时间复杂度为$o(n^{2}\log L+n^{3})$​​(前者为快速幂)​,可以通过

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 505
4 #define mod 1000000009
5 #define ll long long
6 int t,m,n,g,invg,ans,A[N][N],X[N][N],V[N][N],Y[N][N];
7 ll L;
8 int qpow(int n,ll m){
9 int s=n,ans=1;
10 while (m){
11 if (m&1)ans=(ll)ans*s%mod;
12 s=(ll)s*s%mod;
13 m>>=1;
14 }
15 return ans;
16 }
17 int main(){
18 scanf("%d",&t);
19 while (t--){
20 scanf("%d%lld%d",&m,&L,&n);
21 g=qpow(13,(mod-1)/n);
22 invg=qpow(g,mod-2);
23 for(int i=0;i<n;i++)
24 for(int j=0;j<n;j++){
25 A[i][j]=0;
26 X[i][j]=Y[i][j]=qpow(invg,i*j);
27 V[i][j]=(ll)qpow(n*n,mod-2)*qpow((qpow(g,i)+qpow(g,j)+m-2)%mod,L)%mod;
28 }
29 for(int i=0;i<n;i++)
30 for(int j=0;j<n;j++)
31 for(int k=0;k<n;k++)A[i][j]=(A[i][j]+(ll)X[i][k]*V[k][j])%mod;
32 for(int i=0;i<n;i++)
33 for(int j=0;j<n;j++){
34 ans=0;
35 for(int k=0;k<n;k++)ans=(ans+(ll)A[i][k]*Y[k][j])%mod;
36 printf("%d",ans);
37 if (j!=n-1)printf(" ");
38 else printf("\n");
39 }
40 }
41 return 0;
42 }

[hdu7013]String Mod的更多相关文章

  1. RSA算法的C++string实现(模幂算法和欧几里得算法的使用)后附思路

    void resetNumA(string numAStr); //使用string重置numB void resetNumB(string numBStr); //将数组转换为字符串,用于输出 st ...

  2. action 方法的访问

    Action中的方法的访问: 访问Action的中的方法,默认情况下只能访问execute方法.那么多次请求就不能提交到一个Action.能不能一个模块的多次请求提交到一个Action中? * 需要使 ...

  3. Struts2注解 特别注意

    1 Struts2注解的作用 使用注解可以用来替换struts.xml配置文件!!! 2 导包 必须导入struts2-convention-plugin-2.3.15.jar包,它在struts2安 ...

  4. temporary

    private void OnAttendeeConnected(object pObjAttendee) { IRDPSRAPIAttendee pAttendee = pObjAttendee a ...

  5. CCNET+MSBuild+SVN实时构建的优化总结

    本文不是介绍如何使用CCNET+MSBuild+SVN构建自动编译系统,相关的内容可以从很多地方获取,可以再园子里搜一下. 随着我们的SVN库日益壮大,容量达到10G,几十G 甚至更大时,我们发现自动 ...

  6. jst通用删除数组中重复的值和删除字符串中重复的字符

    以下内容属于个人原创,转载请注明出处,非常感谢! 删除数组中重复的值或者删除字符串重复的字符,是我们前端开发人员碰到很多这样的场景.还有求职者在被面试时也会碰到这样的问题!比如:问删除字符串重复的字符 ...

  7. JAVA设计模式之【装饰者模式】

    JAVA设计模式之[装饰者模式] 装饰模式 对新房进行装修并没有改变房屋的本质,但它可以让房子变得更漂亮.更温馨.更实用. 在软件设计中,对已有对象(新房)的功能进行扩展(装修). 把通用功能封装在装 ...

  8. [Swift]LeetCode405. 数字转换为十六进制数 | Convert a Number to Hexadecimal

    Given an integer, write an algorithm to convert it to hexadecimal. For negative integer, two’s compl ...

  9. struts2框架学习之第二天

    day02 下面是在每个Action之前都会执行的拦截器,这段代码来自与struts-default.xml文件. <interceptor-stack name="defaultSt ...

随机推荐

  1. visualbox安装ubuntu18过程中不能输入name,password,密码,姓名问题的解决办法+一些基本操作

    ​ 问题描述:visualbox安装ubuntu18,,,,卡在注册处,无法输入姓名,密码-点击无法输入............如下图: ​ 解决办法:更改你的Ubuntu的主板内存,主板内存默认的值 ...

  2. 关于 Binomial Coefficient is Fun

    题目传送门 Solution 应该这个做法不是很常见吧. 我们设 \(f_{i,j}\) 表示前面 \(i\) 个数,选出的数和为 \(j\) 的贡献之和.因为我们有以下式子: \[\sum_{i=a ...

  3. CF1082G Petya and Graph(最小割,最大权闭合子图)

    QWQ嘤嘤嘤 感觉是最水的一道\(G\)题了 顺便记录一下第一次在考场上做出来G qwqqq 题目大意就是说: 给你n个点,m条边,让你选出来一些边,最大化边权减点权 \(n\le 1000\) QW ...

  4. 初探webpack之从零搭建Vue开发环境

    初探webpack之搭建Vue开发环境 平时我们可以用vue-cli很方便地搭建Vue的开发环境,vue-cli确实是个好东西,让我们不需要关心webpack等一些繁杂的配置,然后直接开始写业务代码, ...

  5. 力扣 - 剑指 Offer 17. 打印从1到最大的n位数

    题目 剑指 Offer 17. 打印从1到最大的n位数 思路1 如果有n位,那么最大值就是\(10^n-1\),即如果n是2,那么最大就到输出到99 考虑到大数情况,所以使用字符数组 还要把字符数组转 ...

  6. Visual Studio CMake 项目和 WSL

    Visual Studio CMake 项目和 WSL https://devblogs.microsoft.com/cppblog/c-with-visual-studio-2019-and-win ...

  7. 剑指offer:JZ8 二叉树的下一个结点

    JZ8 二叉树的下一个结点 描述 给定一个二叉树其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的next指针.下图为一棵有9个节点的二叉 ...

  8. .NET CLI简单教程和项目结构

    WHAT IS .NET CLI ? .NET 命令行接口 (CLI) 工具是用于开发.生成.运行和发布 .NET 应用程序的跨平台工具链. 来源:.NET CLI | Microsoft Docs ...

  9. elasticsearch父子文档处理(join)

    elasticsearch父子文档处理 join 一.背景 二.需求 三.前置知识 四.实现步骤 1.创建 mapping 2.添加父文档数据 3.添加子文档 4.查询文档 1.根据父文档id查询它下 ...

  10. STM32 PWM功能在关闭时GPIO电平不确定的情况

    刚开始接触STM32,遇到一个项目中出现在产品调试中出现在关闭PWM输出时,GPIO电平有不确定的情况.在网上查阅资料发现大神们是这样解释的:PWM在一个脉冲没有结束时关闭输出,会导致GPIO电平不确 ...