传送门

题意

给定序列,从序列中选择k(1≤k≤1e18)个数(可以重复选择),使得得到的排列满足\(x_i与x_{i+1}\)异或的二进制表示中1的个数是3的倍数。问长度为k的满足条件的序列有多少种?

分析

看了tags发现有关矩阵就跟最近做的矩阵快速幂联系起来了,假如ai与aj异或的数满足条件,可以看作i到j练了一条边,再异或后的数到ak也连边,那么如果找长度为3的序列,(ai,aj,ak)一定满足条件

我们可以

1.先\(O(n^2)\)预处理出k=2情况下的邻接矩阵

2.对矩阵求k-1次幂

3.矩阵里的数求和

这道题做完了不妨做做这道题Mistwald,也是类似的一道题

trick

1.注意开long long

2.如果k=1,输出n

代码

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; #define F(i,a,b) for(int i=a;i<=b;++i)
#define ll long long
#define mem(a,b) memset(a,b,sizeof(a))
int n;
const ll mod = 1e9+7;
ll k,a[101];
struct matrix
{
ll m[111][111];
}ans,ret;
bool check(ll x,ll y)
{
ll tmp=x^y;
int cnt=0;
while(tmp){ cnt+=tmp&1;tmp>>=1; }
if(cnt%3==0) return 1;return 0;
}
matrix multi(matrix x,matrix y)
{
matrix tmp;
F(i,1,n)F(j,1,n)
{
tmp.m[i][j]=0;
F(k,1,n) (tmp.m[i][j]+=x.m[i][k]*y.m[k][j])%=mod;
}
return tmp;
}
void quick_mod(ll p)
{
for(;p;p>>=1,ret=multi(ret,ret)) if(p&1) ans=multi(ans,ret);
}
int main()
{
scanf("%d %lld",&n,&k);
F(i,1,n) scanf("%lld",a+i);
if(k==1) { printf("%d\n",n);return 0; }
F(i,1,n)F(j,1,n)if(check(a[i],a[j])) ret.m[i][j]=1;
F(i,1,n) ans.m[i][i]=1;
quick_mod(k-1);
ll cnt=0;
F(i,1,n)F(j,1,n) (cnt+=ans.m[i][j])%=mod;
printf("%lld\n",cnt);
}

Educational Codeforces Round 14E. Xor-sequences(矩阵快速幂)的更多相关文章

  1. Educational Codeforces Round 60 D dp + 矩阵快速幂

    https://codeforces.com/contest/1117/problem/D 题意 有n个特殊宝石(n<=1e18),每个特殊宝石可以分解成m个普通宝石(m<=100),问组 ...

  2. Educational Codeforces Round 52E(构造,快速幂)

    #include <bits/stdc++.h>using namespace std;const int mod=998244353;long long b[200007];long l ...

  3. Codeforces Round #257 (Div. 2) B. Jzzhu and Sequences (矩阵快速幂)

    题目链接:http://codeforces.com/problemset/problem/450/B 题意很好懂,矩阵快速幂模版题. /* | 1, -1 | | fn | | 1, 0 | | f ...

  4. Codeforces 450B div.2 Jzzhu and Sequences 矩阵快速幂or规律

    Jzzhu has invented a kind of sequences, they meet the following property: You are given x and y, ple ...

  5. codeforces 450B B. Jzzhu and Sequences(矩阵快速幂)

    题目链接: B. Jzzhu and Sequences time limit per test 1 second memory limit per test 256 megabytes input ...

  6. Codeforces 1067D - Computer Game(矩阵快速幂+斜率优化)

    Codeforces 题面传送门 & 洛谷题面传送门 好题. 首先显然我们如果在某一次游戏中升级,那么在接下来的游戏中我们一定会一直打 \(b_jp_j\) 最大的游戏 \(j\),因为这样得 ...

  7. codeforces 678D Iterated Linear Function 矩阵快速幂

    矩阵快速幂的题要多做 由题可得 g[n]=A*g[n-1]+B 所以构造矩阵  { g[n] }    =  {A   B}  * { g[n-1]} {   1   }         {0   1 ...

  8. Codeforces 185A Plant( 递推关系 + 矩阵快速幂 )

    链接:传送门 题意:输出第 n 年向上小三角形的个数 % 10^9 + 7 思路: 设 Fn 为第 n 年向上小三角形的个数,经过分析可以得到 Fn = 3 * Fn-1 + ( 4^(n-1) - ...

  9. 2017 Wuhan University Programming Contest (Online Round) Lost in WHU 矩阵快速幂 一个无向图,求从1出发到达n最多经过T条边的方法数,边可以重复经过,到达n之后不可以再离开。

    /** 题目:Lost in WHU 链接:https://oj.ejq.me/problem/26 题意:一个无向图,求从1出发到达n最多经过T条边的方法数,边可以重复经过,到达n之后不可以再离开. ...

随机推荐

  1. BNUOJ Eeny Meeny Moo

    Eeny Meeny Moo Time Limit: 1000ms Memory Limit: 65535KB                     大家都有这种经验,当太多的人同时使用互联网的时候 ...

  2. Populating Next Right Pointers in Each Node (DFS,没想到)

    Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *nex ...

  3. Mac BOOK PRO U盘安装windows7、8及8.1

    http://v.youku.com/v_show/id_XMTI1NjgzMzU0NA==.html http://jingyan.baidu.com/article/1709ad80b3d2f44 ...

  4. 【深度探索c++对象模型】Function语义学之成员函数调用方式

    非静态成员函数 c++的设计准则之一就是:非静态成员函数至少和一般的非成员函数有相同的效率.编译器内部已将member函数实体转换为对等的nonmember函数实体. 转化步骤: 1.改写函数原型以安 ...

  5. 浏览器websocket

    使用浏览器,PHP 来构建的应用,发现都是每次浏览器发送一次http 请求,PHP 回一个响应. 这样,后端的PHP 在处理多次http请求是,每次都是不同的进程在处理. 这就加大了开销, 而且,PH ...

  6. SQL 主机

    SQL 主机 SQL 主机 如果您想要您的网站存储数据在数据库并从数据库显示数据,您的 Web 服务器必须能使用 SQL 语言访问数据库系统. 如果您的 Web 服务器托管在互联网服务提供商(ISP, ...

  7. asp.net mvc的权限管理设计

    现在集中展示用户-角色-权限管理的功能,因此,所有数据表一律简化处理.   1 后台管理效果 (1)角色管理 (2)权限管理   2 数据库设计(MSSQL) (1)用户表dbo.Users 项 类型 ...

  8. Sublime Text 3.3143最新注册码

    Sublime Text3之前用的是老版本,昨天手贱点了更新,就要重新激活,网上找了好多都是之前版本的,以下给干货 —– BEGIN LICENSE —– TwitterInc User Licens ...

  9. POJ3761 Bubble Sort

    对1~n组成的序列进行冒泡排序,一共进行了k趟,问有几个符合题意的序列. 注意:这里指每一趟是指交换当前相邻的全部逆序对,比如:2 1 4 3进行一趟交换就是1 2 3 4 假设我们细心观察.就会发现 ...

  10. vue入门教程 (vueJS2.X)

    vue入门教程vueJS2.X 写在前面 看完此教程可以达到:能看懂并能修改简单的vue项目. 看的过程中,请把所有例子都放到html文件中跑一遍. Vue.js 是什么 Vue.js(读音 /vju ...