Codeforces 691E Xor-sequences(矩阵加速DP)
题目链接 Xor-sequences
利用矩阵加速。
先预处理出当序列长度为$2$的时候的方案数。
也就是说这个序列起点是$a[i]$终点是$a[j]$且中间没有任何元素。
但是所求的$k$很大,序列长度远远不止$2$。这个时候就要考虑乘法原理。
然后利用矩阵乘法来模拟乘法原理,那么就用到了矩阵快速幂。
#include <bits/stdc++.h>
using namespace std;
#define rep(i, a, b) for(int i(a); i <= (b); ++i)
struct Matrix{ long long arr[][];} init, unit;
long long k, ret, mod = 1e9 + ;
long long a[];
int n;
Matrix Mul(Matrix a, Matrix b){
Matrix c;
rep(i, , n) rep(j, , n){
c.arr[i][j] = ;
rep(k, , n) (c.arr[i][j] += (a.arr[i][k] * b.arr[k][j] % mod)) %= mod;
}
return c;
}
Matrix Pow(Matrix a, long long k){
Matrix ret(unit); for (; k; k >>= , a = Mul(a, a)) if (k & ) ret = Mul(ret, a); return ret;
}
inline long long check(long long x){
int ret = ;
for (; x; x >>= ) ret += (x & );
return ret % == ;
}
int main(){
scanf("%d%lld", &n, &k);
rep(i, , n) unit.arr[i][i] = ;
rep(i, , n) scanf("%lld", a + i);
rep(i, , n) rep(j, , n) init.arr[i][j] = check(a[i] ^ a[j]);
Matrix Ans = Pow(init, k - ); ret = ;
rep(i, , n) rep(j, , n) (ret += Ans.arr[i][j]) %= mod;
printf("%lld\n", ret);
return ;
}
Codeforces 691E Xor-sequences(矩阵加速DP)的更多相关文章
- 洛谷P3502 [POI2010]CHO-Hamsters感想及题解(图论+字符串+矩阵加速$dp\&Floyd$)
洛谷P3502 [POI2010]CHO-Hamsters感想及题解(图论+字符串+矩阵加速\(dp\&Floyd\)) 标签:题解 阅读体验:https://zybuluo.com/Junl ...
- [BZOJ 4818/LuoguP3702][SDOI2017] 序列计数 (矩阵加速DP)
题面: 传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=4818 Solution 看到这道题,我们不妨先考虑一下20分怎么搞 想到暴力,本蒟 ...
- Codeforces 576D Flights for Regular Customers(矩阵加速DP)
题目链接 Flights for Regular Customers 首先按照$d$的大小升序排序 然后分成$m$个时刻,每条路径一次处理过来. $can[i][j]$表示当前时刻$i$能否走到$j ...
- CodeForces - 691E Xor-sequences 【矩阵快速幂】
题目链接 http://codeforces.com/problemset/problem/691/E 题意 给出一个长度为n的序列,从其中选择k个数 组成长度为k的序列,因为(k 有可能 > ...
- _bzoj1009 [HNOI2008]GT考试【矩阵加速dp】
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1009 比较不错的一道题,令f(i, j)表示考号匹配到i位,后j位为不吉利串的前j位,那么对 ...
- [ZJOI2011]细胞——斐波那契数列+矩阵加速+dp
Description bzoj2323 Solution 题目看起来非常复杂. 本质不同的细胞这个条件显然太啰嗦, 是否有些可以挖掘的性质? 1.发现,只要第一次分裂不同,那么互相之间一定是不同的( ...
- Codeforces 691E Xor-sequences(矩阵快速幂)
You are given n integers a1, a2, ..., an. A sequence of integers x1, x2, ..., xk is called a & ...
- hihocoder #1162 矩阵加速dp
#1162 : 骨牌覆盖问题·三 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 前两周里,我们讲解了2xN,3xN骨牌覆盖的问题,并且引入了两种不同的递推方法.这一次我 ...
- Codeforces Round #341 (Div. 2) E. Wet Shark and Blocks dp+矩阵加速
题目链接: http://codeforces.com/problemset/problem/621/E E. Wet Shark and Blocks time limit per test2 se ...
随机推荐
- C# SQL数据库学习时遇到到一些异常
1一些关于SqlHelper类的异常: DataAdapter.SqlHelper”的类型初始值设定项引发异常. ExecuteNonQuery.SqlHelper”的类型初始值设定项引发异常. Ex ...
- Python 技巧(三)—— list 删除一个元素的三种做法
我们以一个字符串为元素类型的 list 为例,进行列表元素的删除: >>> l = ['no surfing', 'flippers'] 1 法一:remove(val) >& ...
- Django templates(模板)
为什么用templates? views.py视图函数是用来写Python代码的,HTML可以被直接硬编码在views.py之中.如下: import datetime def current_tim ...
- 洛谷P1424小鱼的航程改进版
题目链接https://www.luogu.org/problemnew/show/P1424
- 转:vc与界面开发之间的文章
[很好的一篇文章,很喜欢看同行的心路历程:http://www.vckbase.com/index.php/nv/444.html] 本屌丝在新春放假期间闲来无事,在各大编程论坛溜达了一圈.发现年前的 ...
- python-侦测系统
大概就是这样 要求 告警需要一定之间内出现多次 然后才报警一次 如果恢复 必须发送恢复的信息
- scripts
Shell Script:================================================================ 示例1:[root@server0 ~]# ...
- URL 传参中需要处理的特殊字符
例如实际请求URL如下: http://www.douwansha.com/mdeditor?data=[{"address":null,"name":&quo ...
- PAT——乙级1018
题目是 1018 锤子剪刀布 (20 point(s)) 大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出 ...
- 直接选择排序(java)
直接选择排序的逻辑非常简单,数组{A1.......An} 先在{A1........An}去获取最小的 与A1交换位置 然后在{A2..........An}中取出最小的 与A2交换位置. ...