Berlekamp-Massey algorithm
https://www.cnblogs.com/zzqsblog/p/6877339.html
https://blog.csdn.net/qq_39972971/article/details/80725873
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 3005;
const int MOD = 1E9 + 7;
inline int Add(int a, int b) {
return (a + b >= MOD) ? (a + b - MOD) : (a + b);
}
inline int Sub(int a, int b) {
return (a >= b) ? (a - b) : (a - b + MOD);
}
inline int Mul(int a, int b) {
return (LL)a * b % MOD;
}
inline int Pow(int a, int b) {
int c = 1;
for (; b; a = Mul(a, a), b >>= 1)
if (b & 1) c = Mul(c, a);
return c;
}
int n;
int a[N], b[N], c[N], d[N];
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; ++i)
scanf("%d", &a[i]);
int m = 0, fa = 0, dt = 0, k = 0;
for (int i = 1; i <= n; ++i) {
int t = a[i];
for (int j = 1; j <= m; ++j)
t = Sub(t, Mul(b[j], a[i - j]));
if (!t) continue;
if (!fa) {
k = m;
m = i;
fa = i;
dt = t;
continue;
}
copy(b + 1, b + m + 1, d + 1);
int x = i - 1 - fa, v = Mul(t, Pow(dt, MOD - 2)), nm = max(m, x + k + 1);
b[x + 1] = Add(b[x + 1], v);
for (int j = 1; j <= k; ++j)
b[x + j + 1] = Sub(b[x + j + 1], Mul(c[j], v));
if (i - m > fa - k) {
copy(d + 1, d + m + 1, c + 1);
fa = i;
dt = t;
k = m;
}
m = nm;
}
// for (int i = m + 1; i <= n; ++i) {
// int t = a[i];
// for (int j = 1; j <= m; ++j)
// t = Sub(t, Mul(a[i - j], b[j]));
// if (t) {
// cerr << i << endl;
// throw;
// }
// }
printf("%d\n", m);
for (int i = 1; i <= m; ++i)
printf("%d ", b[i]);
puts("");
return 0;
}
Berlekamp-Massey algorithm的更多相关文章
- Berlekamp Massey算法求线性递推式
BM算法求求线性递推式 P5487 线性递推+BM算法 待AC. Poor God Water // 题目来源:ACM-ICPC 2018 焦作赛区网络预赛 题意 God Wate ...
- 【hdu 6172】Array Challenge(数列、找规律)
多校10 1002 HDU 6172 Array Challenge 题意 There's an array that is generated by following rule. \(h_0=2, ...
- 线性齐次递推式快速求第n项 学习笔记
定义 若数列 \(\{a_i\}\) 满足 \(a_n=\sum_{i=1}^kf_i \times a_{n-i}\) ,则该数列为 k 阶齐次线性递推数列 可以利用多项式的知识做到 \(O(k\l ...
- Factorization
Factorization or factoring consists of writing a number or another mathematical object as a product ...
- 挑子学习笔记:两步聚类算法(TwoStep Cluster Algorithm)——改进的BIRCH算法
转载请标明出处:http://www.cnblogs.com/tiaozistudy/p/twostep_cluster_algorithm.html 两步聚类算法是在SPSS Modeler中使用的 ...
- PE Checksum Algorithm的较简实现
这篇BLOG是我很早以前写的,因为现在搬移到CNBLOGS了,经过整理后重新发出来. 工作之前的几年一直都在搞计算机安全/病毒相关的东西(纯学习,不作恶),其中PE文件格式是必须知识.有些PE文件,比 ...
- [异常解决] windows用SSH和linux同步文件&linux开启SSH&ssh client 报 algorithm negotiation failed的解决方法之一
1.安装.配置与启动 SSH分客户端openssh-client和openssh-server 如果你只是想登陆别的机器的SSH只需要安装openssh-client(ubuntu有默认安装,如果没有 ...
- [Algorithm] 使用SimHash进行海量文本去重
在之前的两篇博文分别介绍了常用的hash方法([Data Structure & Algorithm] Hash那点事儿)以及局部敏感hash算法([Algorithm] 局部敏感哈希算法(L ...
- Backtracking algorithm: rat in maze
Sept. 10, 2015 Study again the back tracking algorithm using recursive solution, rat in maze, a clas ...
- [Algorithm & NLP] 文本深度表示模型——word2vec&doc2vec词向量模型
深度学习掀开了机器学习的新篇章,目前深度学习应用于图像和语音已经产生了突破性的研究进展.深度学习一直被人们推崇为一种类似于人脑结构的人工智能算法,那为什么深度学习在语义分析领域仍然没有实质性的进展呢? ...
随机推荐
- Loading——spin.js
官网:[http://spin.js.org/] Github地址:[https://github.com/fgnass/spin.js]
- Spring Boot 自定义注册 Servlet、Filter、Listener
前言 在 Spring Boot 中已经移除了 web.xml 文件,如果需要注册添加 Servlet.Filter.Listener 为 Spring Bean,在 Spring Boot 中有两种 ...
- IDEA和VS快捷键对比
IDEA和Visual Studio快捷键对比 VS F5 F9 resume programe 恢复程序 Alt+F10 show executio ...
- window10安装Elasticsearch及可视化工具es header
1.下载es(选择windows版本) https://www.elastic.co/cn/downloads/elasticsearch 2.解压安装包,到bin目录下,运行elasticsearc ...
- USACO2.2 Preface Numbering【思维+打表】
这道题乍一看没有什么思路,细看还是没有什么思路 嗯,细看还是可以看出些什么端倪. 不能复合嵌套什么的 总结一下就只有这样3种规则: 1.IXCM最多三个同样连续 加起来2.递减:加起来 注意VLD不连 ...
- 【linux杂谈】安装linux虚拟机的时候发现的full name,user name有啥区别
本人为了重温linux,在新电脑上又要安装linux虚拟机,在VMware内配置快速安装的时候看到有如下说明: 大家可能跟我一样对于username比较熟悉,但是这个fullname是干嘛的?我们先进 ...
- IDEA 对spring boot Maven 项目打 Jar 包
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> ...
- The system has no LUN copy license
[问题描述] ipsan作为cinder后端的时候,通过快照创建磁盘失败,报以下错误: { u 'data': {}, u 'error': { u 'code': 1077950181, u 'de ...
- google map api key配置
https://console.cloud.google.com/google/maps-apis/apis/maps-backend.googleapis.com/credentials?proje ...
- Python 对于分表的操作
在操作数据库的业务里,我们系统采用了orm框架 ,避免了过多的写sql,利用实体对数据库进行操作 需求: 账户系统里的account表是进行了分表,分表规则为accountid进行20取模,测试环境分 ...