HDU-6030 Happy Necklace 打表+矩阵快速幂
Happy Necklace
前天个人赛规律都找出来了,n的范围是\(10^{18}\),我一想GG,肯定是矩阵快速幂,然后就放弃了。
昨天学了一下矩阵快速幂。
题意
现在小Q要为他的女朋友一个有n个宝石的好的项链(直线),定义好的项链为:如果任意素数长的子串中蓝宝石的数量不小于红宝石的数量就是好的。小Q可以买多少种好的项链呢?
思路
n这么大,绝对是规律题。
先简单分析一下,其实对于好项链的定义可以化简为任意长度为3的子串中至少有两个蓝宝石,然后打表。
#include<bits/stdc++.h>
using namespace std;
int arr[100],pre[100];
int check(int cnt)
{
for(int i =1; i<=cnt; i++)
{
pre[i]=pre[i-1]+(arr[i]==1);
if(i>=3&&(pre[i]-pre[i-3])<2)
return 0;
}
return 1;
}
int main()
{
for(int i=3; i<=20; i++)
{
int ans=0;
for(int j=0; j<(1<<i); j++)
{
for(int k=1; k<=i; k++)
arr[k]=0;
int tmp=j,cnt=0;
while(tmp)
{
arr[++cnt]=tmp%2;
tmp/=2;
}
if(check(i))
ans++;
}
printf("%d %d\n",i,ans);
}
return 0;
}
3 4
4 6
5 9
6 13
7 19
8 28
9 41
10 60
11 88
12 129
13 189
14 277
15 406
16 595
17 872
18 1278
19 1873
20 2745
可以发现a[i]=a[i-1]+a[i-3]
矩阵构造如下:
\(\left[\begin{matrix}1 & 0 & 1\\1 & 0 & 0\\0 & 1 & 0\end{matrix}\right]*\left[\begin{matrix}a_{n-1}\\a_{n-2}\\a_{n-3}\end{matrix}\right]=\left[\begin{matrix}a_{n-1}+a_{n-3} \\a_{n-1}\\a_{n-2}\end{matrix}\right]=\left[\begin{matrix}a_{n} \\a_{n-1}\\a_{n-2}\end{matrix}\right]\)
称最左边的矩阵为关系矩阵A,已知1 2 3 的值分别为2 3 4 ,
\]
代码
//#include<bits/stdc++.h>
#include<vector>
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<string>
#include<math.h>
#include<queue>
#include<map>
#define pb push_back
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N=1e6+10;
const int mod=1e9+7;
const int inf=0x3f3f3f3f;
const double eps=1e-14;
struct Matrix
{
ll mat[3][3];
};
Matrix multi(Matrix a,Matrix b)
{
Matrix res;
memset(res.mat,0,sizeof(res.mat));
for(ll i=0; i<3; i++)
{
for(ll j=0; j<3; j++)
{
for(ll k=0; k<3; k++)
{
res.mat[i][j]+=a.mat[i][k]*b.mat[k][j];
res.mat[i][j]%=mod;
}
}
}
return res;
}
Matrix qpow(Matrix a,ll b)
{
Matrix ans;
memset(ans.mat,0,sizeof(ans.mat));
for(ll i=0; i<3; i++) ans.mat[i][i]=1;//单位矩阵
while(b)
{
if(b&1)
ans=multi(ans,a);
b>>=1;
a=multi(a,a);
}
return ans;
}
int main()
{
Matrix base;
memset(base.mat,0,sizeof(base.mat));
base.mat[0][0]=base.mat[0][2]=base.mat[1][0]=base.mat[2][1]=1;
ll T;
scanf("%lld",&T);
while(T--)
{
ll n;
scanf("%lld",&n);
if(n==2) printf("3\n");
else if(n==3) printf("4\n");
else
{
Matrix now=qpow(base,n-3);
printf("%lld\n",(now.mat[0][0]*4%mod+now.mat[0][1]*3%mod+now.mat[0][2]*2%mod)%mod);
}
}
return 0;
}
HDU-6030 Happy Necklace 打表+矩阵快速幂的更多相关文章
- (hdu 6030) Happy Necklace 找规律+矩阵快速幂
题目链接 :http://acm.hdu.edu.cn/showproblem.php?pid=6030 Problem Description Little Q wants to buy a nec ...
- HDU 2855 斐波那契+矩阵快速幂
http://acm.hdu.edu.cn/showproblem.php?pid=2855 化简这个公式,多写出几组就会发现规律 d[n]=F[2*n] 后面的任务就是矩阵快速幂拍一个斐波那契模板出 ...
- HDU 5950:Recursive sequence(矩阵快速幂)
http://acm.hdu.edu.cn/showproblem.php?pid=5950 题意:给出 a,b,n,递推出 f(n) = f(n-1) + f(n-2) * 2 + n ^ 4. f ...
- HDU 3292 【佩尔方程求解 && 矩阵快速幂】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=3292 No more tricks, Mr Nanguo Time Limit: 3000/1000 M ...
- HDU - 4965 Fast Matrix Calculation 【矩阵快速幂】
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4965 题意 给出两个矩阵 一个A: n * k 一个B: k * n C = A * B M = (A ...
- hdu 4565 So Easy! (共轭构造+矩阵快速幂)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4565 题目大意: 给出a,b,n,m,求出的值, 解题思路: 因为题目中出现了开根号,和向上取整后求 ...
- 数学--数论--HDU 2802 F(N) 公式推导或矩阵快速幂
Giving the N, can you tell me the answer of F(N)? Input Each test case contains a single integer N(1 ...
- HDU 2256 Problem of Precision 数论矩阵快速幂
题目要求求出(√2+√3)2n的整数部分再mod 1024. (√2+√3)2n=(5+2√6)n 如果直接计算,用double存值,当n很大的时候,精度损失会变大,无法得到想要的结果. 我们发现(5 ...
- hdu 1757 A Simple Math Problem_矩阵快速幂
题意:略 简单的矩阵快速幂就行了 #include <iostream> #include <cstdio> #include <cstring> using na ...
随机推荐
- B - Fadi and LCM CodeForces - 1285C 质因子
题目大意很简单,给你一个整数X,让你求a和b,使得max(a,b)尽可能的小,然后打印a,b 题解:想到了质因子分解,也考虑到了暴力,但是觉得暴力的话会TLE,所以打算用贪心做,然后就一直Wa.... ...
- Mac 安装 brew(最新教程,绝对可行)
现在安装brew,一会报这个错,一会儿报那个错,上网查了很多教程,用了很多时间都是不可以,电脑开VPN翻墙也不行. Warning: The Ruby Homebrew installer is no ...
- 详解 volatile关键字 与 CAS算法
(请观看本人博文 -- <详解 多线程>) 目录 内存可见性问题 volatile关键字 CAS算法: 扩展 -- 乐观锁 与 悲观锁: 悲观锁: 乐观锁: 在讲解本篇博文的知识点之前,本 ...
- 被折磨致死的heroku——herku部署
最近一直在弄heroku部署上线,但是因为中国墙和英语问题,一直弄不好,,很是烦躁,所有暂时先放弃了,但是因为查询了一些资料,有些文档链接有必要放到下面,方便各位和自己查看: heroku官方网站: ...
- Windows 上安装msql库安装(基于8.0.19免安装版)
一.进入官网进行下载mysql程序包: https://dev.mysql.com/downloads/mysql/ 二.解压缩 解压文件夹到指定目录,我放在 D:\mysql-8.0.19-winx ...
- Python神库分享之geoip2 IP定位库
先安装这两个 pip install python-geoip-geolite2 -i https://pypi.douban.com/simple pip install geoip2 然后下载资源 ...
- 高德地图首席科学家任小枫QA答疑汇总丨视觉+地图技术有哪些新玩法?
上周,阿里巴巴高德地图首席科学家任小枫在#大咖学长云对话#的在线直播活动上就计算机视觉相关技术发展以及在地图出行领域的应用与大家做技术交流,直播间互动火爆,尤其在QA环节,学弟学妹们纷纷就感兴趣的视觉 ...
- StringBuilder、StringBuffer分析比较
StringBuilder.StringBuffer源码分析 StringBuilder源码分析 类结构 public final class StringBuilder extends Abstra ...
- VR全景视图 Google VrPanoramaView
2019独角兽企业重金招聘Python工程师标准>>> 一.背景简介 Welcome to VR at Google 进入Google VR主页,发现官方给我们提供了两套解决观看VR ...
- Burnside&Polya总结
这里就算是一个小总结吧- 附参考的网址: http://blog.sina.com.cn/s/blog_6a46cc3f0100s2qf.html http://www.cnblogs.com/han ...