[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 Filter与IOC的羁绊
前言 我们在使用ASP.NET Core进行服务端应用开发的时候,或多或少都会涉及到使用Filter的场景.Filter简单来说是Action的拦截器,它可以在Action执行之前或者之后对请求信息进 ...
- MySQL ENGINES 引擎
引擎 存储引擎是数据库底层软件组织. 数据库管理系统(DBMS)使用数据引擎进行创建.查询.更新和删除数据. 不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能. MySQL的核心就是存储引擎 ...
- Servlet学习一(Servlet的使用流程)
一.servlet运行流程 运行流程:浏览器发送请求到服务器,服务器根据url地址在webapps中寻找对应的项目文件夹然后再web.xml中检索对应的servlet,并进行调用二.servlet类写 ...
- Spring 5 MVC 中的 Router Function 使用
Spring 5 发行已经好几年了,里面提出了好几个新点子.其中一个就是 RouterFunction,这是个什么东西呢? Spring框架给我们提供了两种http端点暴露方式来隐藏servlet原理 ...
- Scrum Meeting 10
第10次例会报告 日期:2021年05月30日 会议主要内容概述: 目前组员均无暇软工,进展较慢. 一.进度情况 我们采用日报的形式记录每个人的具体进度,链接Home · Wiki,如下记录仅为保证公 ...
- Scrum Meeting 0501
零.说明 日期:2021-5-1 任务:简要汇报两日内已完成任务,计划后两日完成任务 一.进度情况 组员 负责 两日内已完成的任务 后两日计划完成的任务 qsy PM&前端 整装待发,准备冲刺 ...
- HDI PCB一阶和二阶和三阶如何区分??
一阶板,一次压合即成,可以想像成最普通的板二阶板,两次压合,以盲埋孔的八层板为例,先做2-7层的板,压好,这时候2-7的通孔埋孔已经做好了,再加1层和8层压上去,打1-8的通孔,做成整板.三阶板就 ...
- hdu 1861 游船出租(模拟题,,水)
题意: 现有公园游船租赁处请你编写一个租船管理系统. 当游客租船时,管理员输入船号并按下S键,系统开始计时:当游客还船时,管理员输入船号并按下E键,系统结束计时. 船号为不超过100的正整数.当管理员 ...
- oeasy教您玩转vim - 57 - # 行可视化
可视化编辑 回忆上节课内容 上次我们了解到可视模式 其实可视化对应三种子模式 字符可视模式 v 行可视模式 大写V 块可视模式ctrl+v 我们先来了解字符可视化模式 快捷键 v 可配合各种mot ...
- Win powershell执行策略配置
参考连接:https://blog.csdn.net/jeffxu_lib/article/details/84710386 参考连接:http://www.cragsman.org/index.ph ...