[hdu7013]String Mod
枚举$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的更多相关文章
- RSA算法的C++string实现(模幂算法和欧几里得算法的使用)后附思路
void resetNumA(string numAStr); //使用string重置numB void resetNumB(string numBStr); //将数组转换为字符串,用于输出 st ...
- action 方法的访问
Action中的方法的访问: 访问Action的中的方法,默认情况下只能访问execute方法.那么多次请求就不能提交到一个Action.能不能一个模块的多次请求提交到一个Action中? * 需要使 ...
- Struts2注解 特别注意
1 Struts2注解的作用 使用注解可以用来替换struts.xml配置文件!!! 2 导包 必须导入struts2-convention-plugin-2.3.15.jar包,它在struts2安 ...
- temporary
private void OnAttendeeConnected(object pObjAttendee) { IRDPSRAPIAttendee pAttendee = pObjAttendee a ...
- CCNET+MSBuild+SVN实时构建的优化总结
本文不是介绍如何使用CCNET+MSBuild+SVN构建自动编译系统,相关的内容可以从很多地方获取,可以再园子里搜一下. 随着我们的SVN库日益壮大,容量达到10G,几十G 甚至更大时,我们发现自动 ...
- jst通用删除数组中重复的值和删除字符串中重复的字符
以下内容属于个人原创,转载请注明出处,非常感谢! 删除数组中重复的值或者删除字符串重复的字符,是我们前端开发人员碰到很多这样的场景.还有求职者在被面试时也会碰到这样的问题!比如:问删除字符串重复的字符 ...
- JAVA设计模式之【装饰者模式】
JAVA设计模式之[装饰者模式] 装饰模式 对新房进行装修并没有改变房屋的本质,但它可以让房子变得更漂亮.更温馨.更实用. 在软件设计中,对已有对象(新房)的功能进行扩展(装修). 把通用功能封装在装 ...
- [Swift]LeetCode405. 数字转换为十六进制数 | Convert a Number to Hexadecimal
Given an integer, write an algorithm to convert it to hexadecimal. For negative integer, two’s compl ...
- struts2框架学习之第二天
day02 下面是在每个Action之前都会执行的拦截器,这段代码来自与struts-default.xml文件. <interceptor-stack name="defaultSt ...
随机推荐
- Asp.Net Core 中的HTTP协议详解
1.前言 好久没写博客了,最近虽然没什么假期,但是却比以前还忙!工作.工作.工作,就像赶集似的,聚在一起.对于Web开发人员来说,深入了解HTTP有助于我们开发出更好.更高的Web应用程序.当应用程序 ...
- 基于Hexo+Github Pages搭建的博客
概念 Github Pages可以被认为是用户编写的.托管在github上的静态网页.使用Github Pages可以为你提供一个免费的服务器,免去了自己搭建服务器和写数据库的麻烦.此外还可以绑定自己 ...
- 题解 P6454 麻将 加强版
题目传送门 题目大意 不想写了,直接看题面吧. 思路 被这个题搞自闭了,因为读错题目想一个非常恶心的东西想了一场考试,然后就删代码,然后就被骂了.哎. 需要注意的是:我们只能选一次雀头 于是,不难看出 ...
- 题解 [POI2013]SPA-Walk
题目传送门 题目大意 给出两个长度为 \(n\) 的 \(01\) 串,问是否可以通过某一位把 \(s\) 变为 \(t\),但是中途不能变为 \(k\) 个 \(01\) 串中任意一个,问是否可行. ...
- 更好的 java 重试框架 sisyphus 背后的故事
sisyphus 综合了 spring-retry 和 gauva-retrying 的优势,使用起来也非常灵活. 今天,让我们一起看一下西西弗斯背后的故事. 情景导入 简单的需求 产品经理:实现一个 ...
- g++ 常用命令
g++ --help
- 【UE4 C++】UObject 创建、销毁、内存管理
UObject 的创建 NewObject 模板类 本例使用 UE 4.26,只剩下 NewObject 用来创建 UObject,提供两个带不同可选参数构造函数的模板类 Outer 表示这个对象的外 ...
- 微信小程序的支付流程
一.前言 微信小程序为电商类小程序,提供了非常完善.优秀.安全的支付功能 在小程序内可调用微信的API完成支付功能,方便.快捷 场景如下图所示: 用户通过分享或扫描二维码进入商户小程序,用户选择购买, ...
- GitHub README文件生成目录导航
效果 环境说明 [root@C61 ~]# cat /etc/redhat-release CentOS release 6.10 (Final) [root@C61 ~]# uname -a Lin ...
- 安装hexo博客
前言 ** 跟着步骤一步一步来进行安装 ** 准备环境:node.js和包管理器npm 1:查看包文件 接着安装 淘宝镜像源 sudo这个需要添加获取文件夹访问权限 sudo npm install ...