bzoj2004 [Hnoi2010]公交线路
Description
Input
Output
仅包含一个整数,表示满足要求的方案数对30031取模的结果。
Sample Input
样例二:5 2 3
样例三:10 2 4
Sample Output
3
81
HINT
#include <bits/stdc++.h>
#define il inline
#define RG register
#define ll long long
#define rhl (30031) using namespace std; struct data{ int m[][]; }a,b; int st[],n,k,p,sz,now; il int gi(){
RG int x=,q=; RG char ch=getchar();
while ((ch<'' || ch>'') && ch!='-') ch=getchar();
if (ch=='-') q=-,ch=getchar();
while (ch>='' && ch<='') x=x*+ch-,ch=getchar();
return q*x;
} il int calc(RG int s){
RG int res=; while (s) res+=s&,s>>=; return res;
} il int can(RG int i,RG int j){
RG int x;
if (st[i]>>(p-)&){
x=(st[i]^(<<(p-)))<<;
return (x|)==st[j];
}
if ((st[i]<<)==st[j]) return ;
for (RG int s=;s<p;++s)
if (st[i]>>s&){
x=(st[i]^(<<s))<<;
if ((x|)==st[j]) return ;
}
return ;
} il data mul(data a,data b){
data c;
for (RG int i=;i<=sz;++i)
for (RG int j=;j<=sz;++j){
c.m[i][j]=;
for (RG int k=;k<=sz;++k)
(c.m[i][j]+=a.m[i][k]*b.m[k][j])%=rhl;
}
return c;
} il data qpow(data a,RG int b){
data ans=a; --b;
while (b){
if (b&) ans=mul(ans,a);
a=mul(a,a),b>>=;
}
return ans;
} int main(){
#ifndef ONLINE_JUDGE
freopen("bus.in","r",stdin);
freopen("bus.out","w",stdout);
#endif
cin>>n>>k>>p;
for (RG int s=;s<(<<p);++s)
if (!(s&) && calc(s)==k-) st[++sz]=s;
for (RG int i=;i<=sz;++i)
for (RG int j=;j<=sz;++j)
if (can(i,j)) b.m[i][j]=;
for (RG int i=;i<=sz;++i)
if (st[i]+==(<<k)-) a.m[][now=i]=;
b=qpow(b,n-k),a=mul(a,b);
cout<<a.m[][now]; return ;
}
bzoj2004 [Hnoi2010]公交线路的更多相关文章
- BZOJ2004 HNOI2010公交线路(状压dp+矩阵快速幂)
由数据范围容易想到矩阵快速幂和状压. 显然若要满足一辆公交车的相邻站台差不超过p,则每相邻p个站台中每辆车至少经过一个站台.可以发现这既是必要的,也是充分的. 开始的时候所有车是相邻的.考虑每次把一辆 ...
- 【BZOJ2004】公交线路(动态规划,状态压缩,矩阵快速幂)
[BZOJ2004]公交线路(动态规划,状态压缩,矩阵快速幂) 题面 BZOJ 题解 看到\(k,p\)这么小 不难想到状态压缩 看到\(n\)这么大,不难想到矩阵快速幂 那么,我们来考虑朴素的\(d ...
- [HNOI2010]公交线路
题目 发现\(n\)比较大,但是\(k,p\)都很小,考虑矩乘使得复杂度倾斜一下 发现所有车的最大间隔都是\(p\),还保证\(k<p\),于是我们可以考虑压下最后\(p\)位的情况 于是设\( ...
- 洛谷 P3204 [HNOI2010]公交线路
题面 luogu 题解 矩阵快速幂\(+dp\) 其实也不是很难 先考虑朴素状压\(dp\) \(f[i][S]\) 表示最慢的车走到了\(i\),\([i, p+i-1]\)的覆盖情况 状态第一位一 ...
- [HNOI2010] 公交线路 bus
标签:状态压缩+矩阵快速幂. 题解: 首先看范围,p<=10,那么我们可以想到状态压缩.我们把从一个长度为10的区间进行压缩,1代表可以,那么当值一个区间的1的个数为k个,我们就认为他是合法的. ...
- 【BZOJ2004】[Hnoi2010]Bus 公交线路 状压+矩阵乘法
[BZOJ2004][Hnoi2010]Bus 公交线路 Description 小Z所在的城市有N个公交车站,排列在一条长(N-1)km的直线上,从左到右依次编号为1到N,相邻公交车站间的距离均为1 ...
- 【BZOJ2004】[HNOI2010]Bus 公交线路
[BZOJ2004][HNOI2010]Bus 公交线路 题面 bzoj 洛谷 题解 $N$特别大$P,K$特别小,一看就是矩阵快速幂+状压 设$f[S]$表示公交车状态为$S$的方案数 这是什么意思 ...
- AMap公交线路查询
<!doctype html> <html> <head> <meta charset="utf-8"> <meta http ...
- Android百度地图开发(五)公交线路详情搜索、多条线路显示
一.公交线路详情检索 获取公交线路的详情主要分来两步,1.获取公交线路的Uid,2.通过Uid获取公交线路详情. 1.获取公交线路的Uid: /* * 获得公交线路图的Uid,并且根据系Uid发起公交 ...
随机推荐
- c#项目后期生成事件命令行常用命令
1. xcopy (复制文件) xcopy参数介绍 命令格式:XCOPY source [destination] 一堆可选的参数 参数介绍 source 指定要复制的文件. destinatio ...
- linux 运维基础之 禁止 ping
ping命令不要小瞧呀,小伙子!!! 听过死亡之ping不? 语法 ping [-dfnqrRv][-c<完成次数>][-i<间隔秒数>][-I<网络界面>][-l ...
- Java基础20-构造代码块
特点: 对象一建立就运行了,而且优先于构造函数执行 作用:给对象初始化的 构造代码块和构造方法的区别: 构造方法是对应的对象进行初始化 构造代码块是给所有的对象进行统一的初始化 public clas ...
- mysql 索引、查询优化
查询计划Explain mysql查询过程中,如若想了解当前sql的执行计划,可以通过explain your_sql的方式查看,具体可以参考mysql官方解释:https://dev.mysql.c ...
- SpringBoot | 第二十八章:监控管理之Spring Boot Admin使用
前言 上一章节,我们介绍了Actuator的使用,知道了可通过访问不同的端点路径,获取相应的监控信息.但使用后也能发现,返回的监控数据都是以JSON串的形式进行返回的,对于实施或者其他人员来说,不是很 ...
- 简单shell实现
http://blog.csdn.net/lishuhuakai/article/details/11928055 #include <stdio.h> #include <unis ...
- PAT 1025 PAT Ranking
#include <cstdio> #include <cstdlib> #include <vector> #include <cstring> #i ...
- 前端自动分环境打包(vue和ant design)
现实中的问题:有时候版本上线的时候,打包时忘记切换环境,将测试包推上正式服务器,那你就会被批了. 期望:在写打包的命令行的时候就觉得自己在打包正式版本,避免推包时候的,不确信自己的包是否正确. 既然有 ...
- easyui datagrid 显示 footer
1.设置 showFooter为true $grid = $dg.datagrid({ // fit: true, //fitColumns: true, // pagination: false, ...
- HttpWebResponse对gzip格式返回结果的处理
HttpWebRequest webRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url); HttpWebRes ...