随笔分类 -  算法知识

这里面是我学的一些算法,我将其记录在这里,希望他们会成为我的一部分。
摘要:vector, 变长数组,倍增的思想 size() 返回元素个数 empty() 返回是否为空 clear() 清空 front()/back() push_back()/pop_back() begin()/end() [] 支持比较运算,按字典序 pair<int, int> first, 第一 阅读全文
posted @ 2022-11-20 00:28 Luli& 阅读(24) 评论(0) 推荐(0) 编辑
摘要:string 阅读全文
posted @ 2022-11-20 00:22 Luli& 阅读(54) 评论(0) 推荐(0) 编辑
摘要:题目链接 题目AC代码: #include <bits/stdc++.h> #define int long long using namespace std; const int N = 2e5 + 10; int m, p; struct Node { int l, r; int v; //区间 阅读全文
posted @ 2022-11-04 20:20 Luli& 阅读(23) 评论(0) 推荐(0) 编辑
摘要:题目链接 思路: 在某一段区间是否连续可以求出区间的最大最小值,让他们相减,再与区间端点相减,如果他们的值相等的话,那该区间就是一段连续的区间。当然,他也是有局限性的的,如果区间有重复元素的话,该方法就不在适用了。要具体问题具体分析。 本题AC代码: #include<bits/stdc++.h> 阅读全文
posted @ 2022-11-02 21:15 Luli& 阅读(20) 评论(0) 推荐(0) 编辑
摘要:题目链接 题意: 多组数据输入也就是C++中的: int n; while (cin >> n) { 代码块 } 对于每个数据输出其阶乘的各位上的数字之和。大眼一看,没有思路,那就百度把。 百度解法: 我们进行大表,队1到1000每个数的阶乘进行计算,然后存储到一个sum数组中去。眨眼一看,好像阶乘 阅读全文
posted @ 2022-10-26 23:25 Luli& 阅读(49) 评论(0) 推荐(0) 编辑
摘要:在学习完全背包前我们要先学习一下01背包01背包 完全背包 注意: 01背包的转移方程为 完全背包的状转移方程为 f[i][j] = max(f[i - 1][j] , f[i - 1][j - v] + w , f[i - 1][j - 2 * v] + 2 * w , f[i - 1][j - 阅读全文
posted @ 2022-10-26 13:58 Luli& 阅读(20) 评论(0) 推荐(0) 编辑
摘要:题目链接 题目大意: 给定n个正整数和一个数k,问这n个数的阶乘之和能不能被k的阶乘整除,既:(a[1]!+a[2]!+a[3]!+....+a[n]!) % k! == 0。 题目分析: 对于一个连续的阶乘我们可以对其进行合并。如: 3*2!+ 3*3! = 3!+3*3! = 4*3! = 4! 阅读全文
posted @ 2022-10-24 20:31 Luli& 阅读(171) 评论(0) 推荐(1) 编辑
摘要:选择排序 void xuanze_sort(int a[], int n) { // 选择排序 for (int i = n; i >= 2; i--) { int mx = 1; for (int j = 1; j <= i; j++) { if (a[j] > a[mx]) mx = j; } 阅读全文
posted @ 2022-10-11 16:28 Luli& 阅读(146) 评论(0) 推荐(0) 编辑
摘要:题目链接 stl中的一员大将:unique 也就是去重,通俗来讲,这个玩应的用法一般是 unique(数组名,数组名+大小)(没错和sort几乎一模一样) 然后值得注意的有两点:第一点:在unique之前必须保证去重数组有序,也就是得sort一下。第二点:unique并不会生成一个新的数组,而是将原 阅读全文
posted @ 2022-10-10 21:22 Luli& 阅读(462) 评论(0) 推荐(0) 编辑
摘要:题目链接 组合数: 组合数​表示的是从n个物品中选出m个物品的方案数。举个例子,从(1,2,3)(1,2,3)(1,2,3)三个物品中选择两个物品可以有(1,2),(1,3),(2,3)(1,2),(1,3),(2,3)(1,2),(1,3),(2,3)这三种选择方法。 根据组合数的定义,我们可以给 阅读全文
posted @ 2022-10-09 16:32 Luli& 阅读(39) 评论(0) 推荐(0) 编辑
摘要:题目链接 难点: 首先,不管对于什么语言, 被除数=商*除数+余数, 这是解决问题的关键 例如在C++里,-15%-2=-1,-15/-2=7,而7*-2+(-1)=-15 但是因为我们是不断取余数倒序为转换结果,所以余数不能出现负数,那怎么办呢? 我们只需要将商+1,余数-除数即可,因为余数(绝对 阅读全文
posted @ 2022-10-09 14:29 Luli& 阅读(28) 评论(0) 推荐(0) 编辑
摘要:int i; i = (~n + 1) & n; 阅读全文
posted @ 2022-10-08 21:06 Luli& 阅读(15) 评论(0) 推荐(0) 编辑
摘要:欧拉函数: 在数论,对正整数n,欧拉函数是小于或等于n的正整数中与n互质的数的数目 int phi[1010]; void euler() { for(int i = 2; i <= 1000; i++) phi[i] = i; for(int i = 2; i <= 1000; i ++) { i 阅读全文
posted @ 2022-10-07 21:15 Luli& 阅读(30) 评论(0) 推荐(0) 编辑
摘要:const int N = 1e5 + 10; int primes[N], cnt; bool st[N]; void get_primes(int n) { for(int i = 2; i <= n; i++) { if(!st[i]) primes[++cnt] = i; for(int j 阅读全文
posted @ 2022-10-06 14:18 Luli& 阅读(39) 评论(0) 推荐(0) 编辑
摘要:定义: 把无穷大集合中的若干个元素映射为有限集合以便于统计的方法。当数据之间差值很大,即使排完序后,两个数之间仍有很大的差值,不适合直接用下标表示,这样会导致数组开的过大,容量不够,且中间有很多空没有用。针对这种情况,就想到把这间距很大的 m 个数据,在映射到 [1-m] 上,这样就会有效的减少数组 阅读全文
posted @ 2022-10-05 11:20 Luli& 阅读(31) 评论(0) 推荐(0) 编辑
摘要:质数的分布具有特点: 经过证明可以得到,(大于等于5的)质数一定和6的倍数相邻,一定是6x-1或6x-1。利用这种特性。可以对整数进行筛选,只判断那些是6x-1或6x-1的整数是否为质数。 证明过程如下: 令x≥1,将大于等于5的自然数表示如下: ······6x-1,6x,6x+1,6x+2,6x 阅读全文
posted @ 2022-10-04 20:16 Luli& 阅读(87) 评论(0) 推荐(1) 编辑

点击右上角即可分享
微信分享提示