- 博客(7)
- 资源 (1)
- 收藏
- 关注
原创 2019.7.30 素数筛、矩阵快速幂 题解
A: 素数查询(Easy) 一个欧拉筛然后查询完事 #include <iostream> #include <cstring> using namespace std; const int MAXN = 2e5 + 7; int isprime[MAXN]; //保存素数 int vis[MAXN]; //初始化 void eulerSieve() { ...
2019-07-30 23:14:42 313 2
原创 简明扼要筛法求素数
埃拉特斯特尼筛法(埃氏筛) 原理: 当一个数是素数的时候,那么他的倍数肯定是合数。时间复杂度为 O(nloglogn)。 int isprime[MAXN]; int vis[MAXN]; void Prime(int n) { int cnt = 0; memset(vis, 0, sizeof(vis)); //vis里0是素数,1是合数 vis[0] = 1...
2019-07-29 18:34:52 238
原创 快速乘、快速幂和矩阵快速幂
O(1) 快速乘 首先看看最基本的乘法: #include <iostream> using namespace std; int main() { int a, b; cin >> a >> b; cout << a * b << endl; return 0; } 如果题目需要求出的 a *b...
2019-07-27 15:46:30 323
原创 简明扼要 KMP 算法
朴素字符串匹配 首先我们看看最普通的字符串匹配方法 可以看出朴素算法的匹配思想是用两个指针分别指向目标串和模式串,一旦发生了不匹配的情况,两个指针都回退,然后从目标串的新位置重新开始匹配,复杂度为 O(mn),对于数据量比较大的字符串匹配情况来说必定超时。于是引出了我们下面的 KMP 算法。 KMP KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快...
2019-07-25 09:47:29 321 2
原创 简明扼要树状数组
时间复杂度:O(nlogn) 作用:解决维护动态数组前缀和问题 可以发现如下规律: 1=(001) C[1] = A[1]; 2=(010) C[2] = A[1] + A[2] = C[1] + A[2]; 3=(011) C[3] = A[3]; 4=(100) C[4] = A[1] + A[2] + A[3] + A[4] =...
2019-07-23 16:40:57 449
原创 string 模拟大数加减乘除
1、相加 #include <cstdio> #include <iostream> using namespace std; string add(string s1, string s2) { //s1更长 if(s1.length() < s2.length()) { string temp = s1; s1 = ...
2019-07-18 18:56:40 381
原创 2019.7.16 递归 题解
A: 递归计算累加和 前三题均为简单递归,找到递归终止条件即可 #include <cstdio> using namespace std; int f(int n) { if (n == 1) { return n; } return n + f(n - 1); } int main() { int n; scanf("...
2019-07-16 21:58:45 333
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人