HZOJ 20190727 随(倍增优化dp)
达哥T1
实际上还是挺难的,考试时只qj20pts,还qj失败
因为他专门给出了mod的范围,所以我们考虑把mod加入时间复杂度。
$50\%$算法:
考虑最暴力的dp,设$f[i][j]$表示进行$i$次操作后得到的数为$j$,方案总数,转移应该还是很明显的
$dp[i][j*k\%mod]=dp[i-1][j]×cnt[k]$,$cnt[k]$表示数k出现的次数。
然后在结合前20ptsqj,就可以愉快的拿到50pts。
$100\%$算法:
看题解发现什么原根,矩阵乘,蒟蒻弃疗....
但颓博客时发现remarkable大神写出了倍增优化dp,好像有救了。
根据50分算法,我们可以得到一个性质 $f[i*ii][j*k%mod]=f[i][j]*f[ii][k]$ 蒟蒻博主并不会证
那么$f[i^2][j*k\%mod]=f[i][j]*f[i][k]$ ,这样我们可以处理出$f[i]$,$f[i^2]$,$f[i^4]$,$f[i^8]$....
这样我们根据二进制拆分思想,可以求出ans。
其实这个过程类似于快速幂。
把快速幂模板中的变量换成数组即可。
最后使用滚动数组省空间。
之前没有做过倍增优化dp的题,这道题就当熟悉套路吧。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#define int long long
const int P=;
const int M=;
using namespace std;
int n,m,mod,wi;
int now1=,now2=,last1,last2;
int cnt[M],f[][M],g[][M],a[];
int qpow(int a,int b,int p){
int ans=;
while(b){
if(b&) ans=ans*a%p;
b>>=;
a=a*a%p;
}
return ans%p;
}
void solve(int x){
while(x){
//cout<<x<<endl;
if(x&){
memset(g[now1],,sizeof(g[now1]));
for(int i=;i<mod;i++) for(int j=;j<mod;j++) g[now1][i*j%mod]=(g[now1][i*j%mod]+g[last1][j]*f[last2][i])%P;
now1=last1,last1^=;
}
x>>=;
memset(f[now2],,sizeof(f[now2]));
for(int i=;i<mod;i++) for(int j=;j<mod;j++) f[now2][i*j%mod]=(f[now2][i*j%mod]+f[last2][i]*f[last2][j])%P;
now2=last2,last2^=;
}
return ;
}
signed main(){
scanf("%lld%lld%lld",&n,&m,&mod);
for(int i=;i<=n;i++) {scanf("%lld",&a[i]);cnt[a[i]]++;}
for(int i=;i<mod;i++) f[][i]=cnt[i];
g[][]=;
solve(m);
int Griezmman=qpow(qpow(n,m,P),P-,P)%P,ans=;
//cout<<Griezmman<<endl;
for(int i=;i<mod;i++) ans=(ans+g[last1][i]*i)%P;
//cout<<ans<<endl;
ans=ans*Griezmman%P;
printf("%lld",ans);
}
HZOJ 20190727 随(倍增优化dp)的更多相关文章
- $Noip2012\ Luogu1081$ 开车旅行 倍增优化$ DP$
Luogu Description Sol 1.发现对于每个城市,小A和小B的选择是固定的,可以预处理出来,分别记为ga[],gb[] 2.并且,只要知道了出发城市和出发天数,那么当前城市和小A,小B ...
- CodeForces - 1175E Minimal Segment Cover (倍增优化dp)
题意:给你n条线段[l,r]以及m组询问,每组询问给出一组[l,r],问至少需要取多少个线段可以覆盖[l,r]区间中所有的点. 如果贪心地做的话,可以求出“从每个左端点l出发选一条线段可以到达的最右端 ...
- $CH0601\ Genius\ ACM$ 倍增优化DP
ACWing Description 给定一个长度为N的数列A以及一个整数T.我们要把A分成若干段,使得每一段的'校验值'都不超过N.求最少需要分成几段. Sol 首先是校验值的求法: 要使得'每对数 ...
- 0x57 倍增优化DP
真的是下定了巨大的决心来搞这一讲,果不其然耗了一晚上 开车旅行(真的是NOIP的题吗怎么这么恐怖) 首先,先用set把小A和小B从城市i出发,到达的下一个城市预处理出来. f[i][j][k]表示走了 ...
- POJ 1014 Dividing(多重背包, 倍增优化)
Q: 倍增优化后, 还是有重复的元素, 怎么办 A: 假定重复的元素比较少, 不用考虑 Description Marsha and Bill own a collection of marbles. ...
- Codeforces 356D 倍增优化背包
题目链接:http://codeforces.com/contest/356/problem/D 思路(官方题解):http://codeforces.com/blog/entry/9210 此题需要 ...
- 矩阵乘法优化DP复习
前言 最近做毒瘤做多了--联赛难度的东西也该复习复习了. Warning:本文较长,难度分界线在"中场休息"部分,如果只想看普及难度的可以从第五部分直接到注意事项qwq 文中用(比 ...
- bzoj-4518 4518: [Sdoi2016]征途(斜率优化dp)
题目链接: 4518: [Sdoi2016]征途 Description Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到达T地 ...
- bzoj-1096 1096: [ZJOI2007]仓库建设(斜率优化dp)
题目链接: 1096: [ZJOI2007]仓库建设 Description L公司有N个工厂,由高到底分布在一座山上.如图所示,工厂1在山顶,工厂N在山脚.由于这座山处于高原内陆地区(干燥少雨),L ...
随机推荐
- P3748 [六省联考2017]摧毁“树状图”
传送门 显然是可以树形 $dp$ 的 对每个节点维护以下 $5$ 个东西 $1.$ 从当前节点出发往下的链的最大贡献 $2.$ 节点子树内不经过本身的路径最大贡献 $3.$ 节点子树内经过本身的路径的 ...
- spark学习之Lambda架构日志分析流水线
单机运行 一.环境准备 Flume 1.6.0 Hadoop 2.6.0 Spark 1.6.0 Java version 1.8.0_73 Kafka 2.11-0.9.0.1 zookeeper ...
- java——包装类中的equals方法
基本数据类型包装类中的equals方法用于比对相同包装类中的值是否相等,如果两者比较的包装类类型不同则返回false: Byte public boolean equals(Object obj) { ...
- 转:git常用操作
转自:https://www.cnblogs.com/donghaojun/p/10906981.html 开发常用git指令:git init # 初始化本地git环境 git clone xxx ...
- canva绘制圆角矩形
在做组态的时候,需要支持矩形圆角格式,但是因为canvas本身不带有圆角矩形,需要自行算出坐标进行绘制 方案一.统一圆角 <!DOCTYPE html> <html> < ...
- vue进阶:基于vue-cli创建项目(搭建手脚架)
vue-cli安装.创建项目 基于vue-cli创建的项目进行开发 使用vue-cli图形化界面搭建项目 插件与工具 一.vue-cli简介.安装.创建项目 Vue-cli是基于Vue.js进行快速开 ...
- 2 java开发环境的配置步骤
1 首先需要下载JDK(以java se development kit java标准版开发包) 8.0 如果只是单纯的运行java程序则只需要安装JRE(java runtime envirome ...
- Redis-Hash常用命令
Redis-Hash常用命令 hset key field value 设置一个散列,但是在散列中一次只能设置一个属性,如果要批量设置多个属性,则需要使用 hmset命令 hget key field ...
- JavaWeb【七、JSP状态管理】
http协议无状态性 当提交请求,服务器返回响应.但当同一用户同一浏览器再次提交请求,服务器并不知道与刚才的请求是同一用户浏览器发起. 保存用户状态的两大机制 Session-保存在服务器端 Cook ...
- go语言json转map
package util import ( "encoding/json" "fmt" ) // json转map函数,通用 func JSONToMap(st ...