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发起公交 ...
随机推荐
- 转 Oracle]如何在Oracle中设置Event
https://www.cnblogs.com/gaojian/p/7619960.html 为了调查Oracle 的故障,可以通过设置event ,来了解详细的状况.方法如下: ■ 如果使用 SPF ...
- SQL Server Reporting Service(SSRS) 第七篇 常见错误汇总
1. The current action cannot be completed. The user data source credentials do not meet the requirem ...
- Spark-HBase集成错误之 java.lang.NoClassDefFoundError: org/htrace/Trace
在进行Spark与HBase 集成的过程中遇到以下问题: java.lang.IllegalArgumentException: Error while instantiating 'org.apac ...
- jquery返回顶部和底部插件和解决ie6下fixed插件
(function($){ //返回顶部和底部插件 $.fn.extend({ goTopBootom:function (options){ //默认参数 var defaults = { &quo ...
- HZAU 18——Array C——————【贪心】
18: Array C Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 586 Solved: 104[Submit][Status][Web Boar ...
- FZU 2214 ——Knapsack problem——————【01背包的超大背包】
2214 Knapsack problem Accept: 6 Submit: 9Time Limit: 3000 mSec Memory Limit : 32768 KB Proble ...
- jrebel + myeclipse 实现热部署
1.什么是jrebel JRebel是一套JavaEE开发工具.JRebel允许开发团队在有限的时间内完成更多的任务修正更多的问题,发布更高质量的软件产品. JRebel是收费软件. Jrebel 可 ...
- .net比较两个时间的大小,不含日期,精确到分
解决方案: 1.将要比较的两个时间转成DateTime类型: DateTime date1 = DateTime.Parse("8:00"); DateTime date2 = D ...
- PHP环境配置解释
PHP中注释:#,//,/* */ 一.修改Apache配置 DocumentRoot "G:\PHP" //修改完需要重启Apache //以下二选一 ----- ...
- html跨域获取数据
a.com下的a.html,需要嵌入b.com下的b.html.这时建一个静态页面c.html将c.html放到a.com服务器中.b.html在嵌入c.html.这样,将参数值传输到c.html中, ...