- 博客(22)
- 资源 (3)
- 收藏
- 关注
原创 Codeforces Round #627 (Div. 3)
#include<iostream>#include<algorithm>#include<cmath>#include<cstring>using namespace std;const int INF = 0x3f3f3f3f;const int N = 1e3 + 10;int t, n, dis[N], mp[N][N];bool s[N];void dijkstra( ){ dis[1] = 0; int t; ...
2021-09-12 20:41:45
248
原创 第四周周报
学习知识点:博弈论学习数列分块&st表几种最短路的算法(4种)图论基础学习比赛:集训队对赛总结:这周感觉难度确实是有,都是以前没有用过甚至没有听过的算法,到现在也只会做一点模板题(恼火),特别是图论,因为我们对离散数学几乎等于没学,所以学起来就有点恼火,博弈论确实有点烧脑(脑子不够用,所以下棋什么对才总是输)。然后还学习了关于区间操作对三种算法:线段树、ST表,数列分块,只能说各有各的有点,具体题目还要具体分析。感觉图论还是要多做一点题,还不是很熟悉,debu
2021-08-13 00:09:08
326
原创 博弈论学习
A - 取石子游戏 1思路:这道题可以用sg函数做,但是这道题有更简单的方法:思维。我们可以发现,如果n = ( 1 + k ) * r + s,当先手拿到s,而后手最多取a( a >= 1 && a <= k ),那么先手再取( 1 + k - a )。这样先手按照这个策略就会取得永远的胜利,如果 s == 0,那么不论先手取多少(在规则范围内),后手都永远占优势。...
2021-08-12 23:58:59
302
1
原创 数列分块&st表
数列分块:数列分块的思想就是通过把数列分成块状,整体上通过块来对数列进行操作,同时在做有些操作的时候有一点lazy标记的思想,而且一般都是多定义数组来解决不同的功能。这个和线段树解决的问题差不多,但是不得不承认在有些问题的解决上线段树的代码两确实太大了。ST表:算法的主题是倍增。常用来处理RMQ问题。一般开 a[ i ][ j ]表示从下标 i 开始,长度为 2^j的子数组最值是多少。步骤一般是 dp预处理 查询操作。ST表的复杂度为:预处理 O( NlogN); O( 1 ).具体见下面.
2021-08-12 22:28:17
257
原创 几种最短路的算法(4种)
FLoyd算法适用范围:无负权回路即可,边权可正可负,运行一次算法即可求得任意两点间最短路(多源最短路)。具体来说:这是是一种dp算法,稠密图效果最佳,对于稠密图,效率要高于执行Dijkstra。时间复杂度为O(N^3),空间复杂度为O(N^2)。好的博客:最短路径模板+解析——(FLoyd算法)模板题目:六度分离#include<stdio.h>#include<cstring>using namespace std;const int INF = 0x
2021-08-10 21:06:55
959
原创 图论基础学习
C - 图论入门思路:就是一道简单的邻接矩阵,知道什么是邻接矩阵以及其意义就可以做。变就是矩阵中非零的个数,点的出度数就是a[ m ][ i ],入度数就是a[ i ] [ m ]。#include<iostream>using namespace std;const int N = 1e3 + 10;int n, m, a[N][N], cnt;int main(){ ios :: sync_with_stdio( false ); cin.tie
2021-08-09 20:18:18
201
原创 第三周周报
学习知识点:欧拉函数 & 组合数矩阵快速幂 & 扩展欧几里得简单DP(最长上升子序列 & 最长公共子序列 )比赛:2021年乐师&理工暑期积分赛第三场LSNUACM_Summer_Team1总结与规划:感觉这周比赛比较多(其实也就多了个团队赛),确实是每日一遍:我好菜~。这周一部分重点在数论方面吧,觉得数论真的太考数学了,数学的推理、演算、思考……。然后还有一点就是发现自己其实有时候对于题目是有思考的,可是对于想法转化为代码有时候比较困难,可能
2021-08-08 20:25:35
227
原创 欧拉函数 & 组合数
A - 互质数的个数(一)题意:有t次询问,每次询问给一个数n,求出其欧拉函数。( 1 <= t <= 100 1 <= n <= 1e10)思路:这道题的n很大,用筛法求欧拉函数数组都开不了,再加上t很小,所以可以考虑使用直接的欧拉函数,板题。#include<iostream>using namespace std;typedef long long ll;ll k, num;ll phi(ll x){ ll res = x;...
2021-08-08 20:10:44
381
原创 矩阵快速幂 & 扩展欧几里得
A - 同余方程题意:求关于x的同余方程ax ≡ 1(mod b) 的最小正整数解。输入数据保证一定有解—— gcd(a,mod)|yu PS:( 2 <= a, b <= 2e9 )思路: 这题很明显是扩展欧几里得的应用。这是个很好的讲解——扩展欧几里得 .化简为:ax+by = 1,且保证有解,说明fgcd( a, b ) | 1(反过来说明一定有解) ,形式就变成了ax + by = gcd(a, b)。#include<iostream>...
2021-08-05 20:12:25
354
原创 简单DP(最长上升子序列 & 最长公共子序列 )
A - 数塔题意:这是一道很经典的dp入门题目。有如下所示的数塔(塔状结构),要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?思路:很明显是一道dp,但是从哪里dp很关键,可以从上往下,可以从下往上,但是个人推荐使用从下往上,因为这样不好处理边界问题,因为状态转移方程式为:dp[ i ][ j ] = max( dp[ i - 1][ j ], dp[ i - 1][ j - 1 ] ) + a[i][j];,而从第二行开始如果不做特殊处理,也会越界,比如每一行..
2021-08-04 17:15:20
250
2
原创 第一周&第二周周报
知识点的学习:贪心&栈&队列&优先队列2021_07_20(双指针&尺取&离散化&stl部分容器介绍&struct重写)DFS & 剪枝 & 状态搜索BFS入门整数二分&浮点二分快速幂 & 约数 & GCD & 质数筛(埃塞 & 线塞)前缀和&差分&位运算&Hash函数树形结构基础&字典树并查集入门学习线段树入门学习完
2021-08-02 19:26:10
419
8
原创 并查集入门学习
A - Binary Tree Traversals题意:输入一个二叉树的先序遍历和中序遍历的结果序列,求这棵二叉树后序遍历的序列。思路:这道题是为了让我们熟悉二叉树的结构基础同时掌握树上搜索的技巧。根据先(中)序遍历的概念,可以知道先序的第一个数就是这棵树的root,然后根据中序序列可知,root点左边的数构成以这个root点为根节点的左子树,同理,右边的树构成其右子树。这里有一种递归的思想,然后再把左(右)子树当做单独的一棵树,再来寻找。#include <iostream>.
2021-08-02 18:40:42
109
原创 树形结构基础&字典树
A - Binary Tree Traversals题意:输入一个二叉树的先序遍历和中序遍历的结果序列,求这棵二叉树后序遍历的序列。思路:这道题是为了让我们熟悉二叉树的结构基础同时掌握树上搜索的技巧。根据先(中)序遍历的概念,可以知道先序的第一个数就是这棵树的root,然后根据中序序列可知,root点左边的数构成以这个root点为根节点的左子树,同理,右边的树构成其右子树。这里有一种递归的思想,然后再把左(右)子树当做单独的一棵树,再来寻找。#include <iostream>.
2021-08-01 23:32:12
207
原创 前缀和&差分&位运算&Hash函数
——最大数题意:给定一个由整数数组 A 表示的环形数组 C,求 C 的非空子数组的最大可能和。在此处,环形数组意味着数组的末端将会与开头相连呈环状。此外,子数组最多只能包含固定缓冲区 A 中的每个元素一次。思路:其实这道题和一般的题最大的区别就是:环状,第一种方式是把其模拟成环状,即是说把原数组a1 a2 a3 a4 ……an → a1 a2 a3 a4 …… an a1 a2 ……a(n - 1),然后使用前缀和,但是时间复杂度和空间复杂度趋势不太,一旦数据大起来就要wa;第二种方式是转换思维:分
2021-08-01 19:56:11
211
原创 快速幂 & 约数 & GCD & 质数筛(埃塞 & 线塞)
常用代码模板4——数学知识yyds试除法判定质数bool is_prime(int x){ if (x < 2) return false; for (int i = 2; i <= x / i; i ++ ) if (x % i == 0) return false; return true;}试除法分解质因数void divide(int x){ for (int i = 2; i <.
2021-08-01 11:20:37
201
原创 整数二分&浮点二分
A - Funky Numbers题意:给一个数num(max = 1e9),询问这个数可否由两个triangular number组成,triangular number:k(k + 1) / 2。思路:最简单的思路就是打表,因为这个数虽然是1e9,但是可以从1开始打表到1e6(注意必须是1e6,因为1e5 * 9999 < 1e9),任意两个相邻的数的乘积,然后枚举第一个数,二分查找第二个数,最关键的是(two triangular numbers (not necessarily di.
2021-07-25 20:52:27
122
原创 BFS入门
E - 红与黑题意:蒜厂有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。思路:其实这道题用dfs和bfs都可以做出来。这道题可以作为bfs的板子。注意区分dfs和bfs的区别,bfs一般不涉及函数的递归#include <iostream>#include <cstring>#include <algorithm>#include &l.
2021-07-25 19:26:29
122
原创 DFS & 剪枝 & 状态搜索
D - 红与黑题意:蒜厂有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。思路:使用dfs进行搜索,同时行列都不超过20,也不会超时。注意题目给出的条件:你站在其中一块黑色的瓷砖上。#include <iostream>#include <cstring>#include <algorithm>using namespace std;i.
2021-07-25 17:12:32
211
原创 2021_07_20(双指针&尺取&离散化&stl部分容器介绍&struct重写)
A - Sum of Consecutive Prime Numbers题意:给定一个正整数,查询有多少个满足其和可以用连续的质素表示,以0结尾。#include <iostream>#include <cstring>#include <algorithm>#include <vector>#include <cmath>using namespace std;typedef long long ll;vector<
2021-07-25 14:52:02
174
1
原创 贪心&栈&队列&优先队列
E - 均分纸牌题意:给出一个长度为n的序列,序列从1开始编号,序列上的数代表这个位置上的权值,且保证所有位置上的权值之和为n的倍数。操作如下:在第一个位置上的数的权值,只能往第二个位置上移动,第n个位置上的数的权值只能往第n-1的数移动,其余左右都可。要求找到一种移动方法,用最少的移动次数使得每个位置上的权值一样。思路:其实这道题就是贪心。比如序列: 9, 8, 17, 6,这个平均数就是10,从1位置开始,需要从右边借一个,而右边本身也差两个,最后变成差三个,那为什么不3位置直接给2位置3个,然
2021-07-25 13:40:04
163
原创 JavaWeb
beanBookpackage bean;public class Book { private String id; private String name; private String publisher; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } p
2021-07-06 12:51:09
95
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人