- 博客(32)
- 收藏
- 关注
原创 Java简单计算器
计算器(1)使用javax.swing包中的组建JFrame,JTextField,JComboBox,JButton完成以下界面的设计;(2)功能为用户可以在文本框1(在窗体左边)和文本框2(在窗体中间)中输入数字,然后在下拉列表框中选择需要计算的符号即加减乘除的符号,当用户单击“=”号按钮时,在最右边的文本框中显示结果,当单击清除按钮时,可以把所有文本框的内容都清空。要求单击等号按钮时若文本框1或者文本框2内容为空,则弹出对话框提示用户“请在文本框中输入数字”;(3)将每次计算的...
2022-05-21 10:06:06
3501
原创 贪心-区间覆盖
问题描述给定 N 个闭区间 [ai,bi] 以及一个线段区间 [s,t],请你选择尽量少的区间,将指定线段区间完全覆盖。输出最少区间数,如果无法完全覆盖则输出 −1。输入格式第一行包含两个整数 s 和 t,表示给定线段区间的两个端点。第二行包含整数 N,表示给定区间数。接下来 N 行,每行包含两个整数 ai,bi,表示一个区间的两个端点。输出格式输出一个整数,表示所需最少区间数。如果无解,则输出 −1。数据范围1≤N≤105,−109≤ai≤bi≤109,−109≤
2022-04-29 09:01:05
456
原创 区间分组问题
给定 N 个闭区间 [ai,bi],请你将这些区间分成若干组,使得每组内部的区间两两之间(包括端点)没有交集,并使得组数尽可能小。输出最小组数。输入格式第一行包含整数 N,表示区间数。接下来 N 行,每行包含两个整数 ai,bi,表示一个区间的两个端点。输出格式输出一个整数,表示最小组数。数据范围1≤N≤105,−109≤ai≤bi≤109输入样例:3-1 12 43 5输出样例:2解题思想:本题利用贪心的思想。max表示当前组中最大的右端点1.将每个区间的
2022-04-28 21:01:31
2675
原创 进制转换总结
整型有4种进制形式:1.十进制: 都是以0-9这九个数字组成,不能以0开头。2.二进制: 由0和1两个数字组成。3.八进制: 由0-7数字组成,为了区分与其他进制的数字区别,开头都是以0开始。4.十六进制:由0-9和A-F组成。为了区分于其他数字的区别,开头都是以0x开始。1.十进制转换为n进制整数部分(1) 十进制转换为n进制:取余n再除以n,直至数为0停止。(2)将某个十进制数除n得到的整数部分保留,作为第二次除n时的被除数,得到的余数依次记下,重复上述步骤,直到整数部分为0就结
2022-04-11 20:16:52
3282
原创 SPFA算法
SPFA SPFA是一种用队列优化的Bellman_ford算法,看上去和BFS很像,Bellman_ford效率较低就不介绍了,还有一种用DFS优化Bellman_ford的SPFA但是往往这种方法比平时更加劣化没有队列优化的好用,平时用SPFA就够用了。可以解决负边问题,可以判断负环是否存在。在稀疏图中,采用类似邻接链表储存比较节省空间。总而言之,SPFA算法仅仅只是对该算法的一个优化。Bellman_ford算法会遍历所有的边,但是有很多的边遍历了其实没有什么意义,我们只用遍历...
2022-04-07 16:11:23
214
原创 集合-Nim游戏
题目描述:给定 n 堆石子以及一个由 k 个不同正整数构成的数字集合 S。现在有两位玩家轮流操作,每次操作可以从任意一堆石子中拿取石子,每次拿取的石子数量必须包含于集合 S,最后无法进行操作的人视为失败。问如果两人都采用最优策略,先手是否必胜。输入格式第一行包含整数 k,表示数字集合 S 中数字的个数。第二行包含 k 个整数,其中第 i 个整数表示数字集合 S 中的第 i 个数 si。第三行包含整数 n。第四行包含 n 个整数,其中第 i 个整数表示第 i 堆石子的数量 hi。
2022-03-28 15:12:58
181
原创 Nim游戏详解
若一个游戏满足:由两名玩家交替行动1.在游戏进行的任意时刻,可以执行的合法行动与轮到哪位玩家无关2.不能行动的玩家判负3.则称该游戏为一个公平组合游戏。尼姆游戏(NIM)属于公平组合游戏,但常见的棋类游戏,比如围棋就不是公平组合游戏,因为围棋交战双方分别只能落黑子和白子,胜负判定也比较负责,不满足条件2和3。题目描述给定 n 堆石子以及一个由 k 个不同正整数构成的数字集合 S。现在有两位玩家轮流操作,每次操作可以从任意一堆石子中拿取石子,每次拿取的石子数量必须包含于集合 S,最后
2022-03-28 11:24:01
2612
原创 食物链(带权并查集)
题目:动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形。A 吃 B,B 吃 C,C 吃 A。现有 N 个动物,以 1∼N 编号。每个动物都是 A,B,C 中的一种,但是我们并不知道它到底是哪一种。有人用两种说法对这 N 个动物所构成的食物链关系进行描述:第一种说法是 1 X Y,表示 X 和 Y 是同类。第二种说法是 2 X Y,表示 X 吃 Y。此人对 N 个动物,用上述两种说法,一句接一句地说出 K 句话,这 K 句话有的是真的,有的是假的。当一句
2022-03-27 10:08:18
329
原创 染色法判断二分图
1.二分图 二分图又叫二部图,是图论中的一种特殊模型。设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图。简单来说,如果图中点可以被分为两组,并且使得所有边都跨越组的边界,则这就是一个二分图。准确地说:把一个图的顶点划分为两个不相交子集 ,使得每一条边都分别连接两个集合中的顶点。如果存在这样的划分,则此图为一个二分图。二分图重要性质:二分图...
2022-03-24 16:49:12
2567
1
原创 简单的计算器
题目描述读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。输入测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。输出对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。样例输入1 + 24 + 2 * 5 - 7 / 110样例输出3.0013.36解题思路本题模拟简单的计算器,只进行加减乘除运算,四种运算符优先级相同,从左到
2022-03-22 14:10:29
1529
原创 AcWing 801 二进制中1的个数
题目描述给定一个长度为 n 的数列,请你求出数列中每个数的二进制表示中 1 的个数。输入格式第一行包含整数 n。第二行包含 n 个整数,表示整个数列。输出格式共一行,包含 n 个整数,其中的第 i 个数表示数列中的第 i 个数的二进制表示中 1 的个数。数据范围1≤n≤100000,0≤数列中元素的值≤10^9输入样例:51 2 3 4 5输出样例:1 1 2 1 2解题思路:本题利用位运算的思想,1.求n的第k个数字:n>>k&12.返回n
2022-03-21 20:17:12
280
原创 快速幂算法
什么是快速幂快速幂:快速求a^k % p的问题,时间复杂度:O(logk),若对于n组数据,那么时间复杂度为O(n∗logk)暴力做法解题思路:n组数据,循环k次分别求出a^k%p。时间复杂度为o(n*k) 可能会时间超限。#include<iostream>using namespace std;int main(){ int n; cin>>n; while(n--) { int a,k,p;
2022-03-21 08:31:13
323
原创 最长上升子序列
最长上升子序列|给定一个长度为N的数列,求数值严格单调递增的子序列的长度最长是多少。输入格式第一行包含整数N。第二行包含N个整数,表示完整序列。输出格式输出一个整数,表示最大长度。数据范围1≤N≤1000−109≤数列中的数≤109输入样例:73 1 2 1 8 5 6输出样例:4...
2022-03-18 09:06:31
155
原创 前缀和与差分总结
目录1.前缀和2.前缀和算法的好处3.二维前缀和4.差分5.一维差分6.二维差分1.前缀和前缀和是指某序列的前n项和,可以把它理解为数学上的数列的前n项和,而差分可以看成前缀和的逆运算。合理的使用前缀和与差分,可以将某些复杂的问题简单化。原数组: a[1], a[2], a[3], a[4], a[5], …, a[n]前缀和 Si为数组的前 i项和前缀和: S[i] = a[1] + a[2] + a[3] + … + a[i]注意:前缀和下标一...
2022-03-15 10:41:05
2977
原创 子矩阵的和
题目描述输入一个 n 行 m 列的整数矩阵,再输入 q 个询问,每个询问包含四个整数 x1,y1,x2,y2,表示一个子矩阵的左上角坐标和右下角坐标。对于每个询问输出子矩阵中所有数的和。输入第一行包含三个整数 n,m,q。接下来 n 行,每行包含 m 个整数,表示整数矩阵。接下来 q 行,每行包含四个整数 x1,y1,x2,y2,表示一组询问。输入较多,建议用scanf和printf1≤n,m≤10001≤q≤2000001≤ x1≤ x2≤ n1≤ y1≤ y2≤ m...
2022-03-13 13:54:52
2635
1
原创 二分查找算法模板
二分模板一共有两个,分别适用于不同情况。算法思路:假设目标值在闭区间[l, r]中, 每次将区间长度缩小一半,当l = r时,我们就找到了目标值。版本一当我们将区间[l, r]划分成[l, mid]和[mid + 1, r]时,其更新操作是r = mid或者l = mid + 1;,计算mid时不需要加1。C++ 代码模板:int lzz(int l, int r){ while (l < r) { int mid = l + r >>
2022-03-04 09:55:34
480
原创 01背包问题详解
什么是背包问题最常见的背包问题有01背包,完全背包,多重背包,分组背包这四种。什么是背包问题?简单来说就是:一个小偷背了一个背包潜进了金店,包就那么大,他如果保证他背出来所有物品加起来的价值最大。背包问题属于动态规划,解决动态规划问题一般以下图方式来考虑01背包问题01背包问题含义是N个物品,容量V背包,每件物品仅用一次例题:AcWing 2.01背包问题有 N件物品和一个容量是 V的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是wi。求解将哪些物品装入
2022-03-03 09:45:12
22114
原创 中国剩余定理总结
1.孙子问题最早,在《孙子算经》中有这样一个问题:“今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?用白话描述就是,现在有一个数不知道是多少,只知道这个数除以3余2,除以5余3,除以7余2, 问这个数是多少?上面的问题可以转换为以下这样一个方程组:其中这个x就是我们要求的数。而中国剩余定理就是用来解决上述形式的方程组的x解的。2.中国剩余定理公式设正整数m1,m2,....,mk两两互素,则同余方程组:3.解决例题AcWing 204 表达整数的.
2022-02-14 16:47:39
2413
原创 欧拉函数总结
1.什么是欧拉函数在数论中,对正整数n,欧拉函数是小于或等于n的正整数中与n互质的数的数目。此函数以其首名研究者欧拉命名,它又称为φ函数(由高斯所命名)或是欧拉总计函数[1](totient function,由西尔维斯特所命名)。例如,因为1,3,5,7均和8互质。欧拉函数实际上是模n的同余类所构成的乘法群(即环的所有单位元组成的乘法群)的阶。这个性质与拉格朗日定理一起构成了欧拉定理的证明。总而言之,欧拉函数是小于x的整数中与x互质的数的个数,一般用φ(x)表示。特殊的,φ(1)=1。.
2022-02-12 20:49:00
6378
原创 AcWing 868 筛质数
方法一:最普通的筛法 O(nlogm)void get_primes2(){ for(int i=2;i<=n;i++){ if(!st[i]) primes[cnt++]=i;//把素数存起来 for(int j=i;j<=n;j+=i){//不管是合数还是质数,都用来筛掉后面它的倍数 st[j]=true; } }}方法二:埃式筛法 O(loglogn)void get_primes1()...
2022-02-11 16:36:01
191
原创 最小生成树详解(模板 + 例题)
1.什么是最小生成树一个图中可能存在多条相连的边,我们一定可以从一个图中挑出一些边生成一棵树。这仅仅是生成一棵树,还未满足最小,当图中每条边都存在权重时,这时候我们从图中生成一棵树(n - 1 条边)时,生成这棵树的总代价就是每条边的权重相加之和。 一个有N个点的图,边一定是大于等于N-1条的。图的最小生成树,就是在这些边中选择N-1条出来,连接所有的N个点。这N-1条边的边权之和是所有方案中最小的。2.最小生成树的应用要在n个城市之间铺设光缆,主要目标是要使这 n 个城市的任意两个...
2022-02-10 16:25:39
6080
原创 AcWing 854 Floyd求最短路
Floyd算法简介Floyd算法(Floyd-Warshall algorithm)又称为弗洛伊德算法、插点法,是解决给定的加权图中顶点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名。适用范围:无负权回路即可,边权可正可负,运行一次算法即可求得任意两点间最短路。优缺点Floyd算法适用于APSP(AllPairsShortestPaths),是一种
2022-02-08 13:30:03
270
原创 AcWing 853 有边数限制的最短路
本题利用是Bellman_ford算法,因为本题存在负权边;什么是Bellman_ford算法 Bellman - ford 算法是求含负权图的单源最短路径的一种算法,效率较低,代码难度较小。其原理为连续进行松弛,在每次松弛时把每条边都更新一下,若在 n-1 次松弛后还能更新,则说明图中有负环,因此无法得出结果,否则就完成。(通俗的来讲就是:假设 1 号点到 n 号点是可达的,每一个点同时向指向的方向出发,更新相邻的点的最短距离,通过循环 n-1 次操作,若图中不存在负环,则 1 号点一定会到..
2022-02-08 13:10:48
639
原创 Dijkstra求最短路
1.最短路径问题介绍问题解释:从图中的某个顶点出发到达另外一个顶点的所经过的边的权重和最小的一条路径,称为最短路径解决问题的算法:迪杰斯特拉算法(Dijkstra算法) 弗洛伊德算法(Floyd算法) SPFA算法 Bellman_ford算法Dijkstra算法是解决单源最短路问题的一种算法(所以边权重都是正数),单源最短路为求一个点到所有点的最短距离。2.Dijkstra介绍算法特点:迪科斯彻算法使用了广度优先搜索解决赋权有向图或者无向图的单源最短路径问题,算法最.
2022-02-07 11:40:33
371
原创 拓扑排序总结
1.拓扑排序概念在图论中,拓扑排序(Topological Sorting)是一个有向无环图(DAG, Directed Acyclic Graph)的所有顶点的线性序列。且该序列必须满足下面两个条件:1.每个顶点出现且只出现一次。2.若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面。有向无环图(DAG)才有拓扑排序,非DAG图没有拓扑排序一说。这里需要介绍两个重要知识,入度和出度。入度是有多少边指向自己,出度是自己指别人有多少边。2.如何写拓扑排序
2022-02-05 20:30:12
1080
原创 AcWing 846 树的重心
树的重心是树与图的深度优先遍历的一道经典例题。图的存储有两种方法:1.邻接矩阵,简单来说就是开一个二维数组,但是不能存储重边,g[a,b],空间复杂度为n^n;2.邻接表,就是多个单链表,每一个点开一个单链表,存储这个点能到哪里。插入一个新边一般在头节点处。注意我们通常情况上是使用邻接表来存储,有点像哈希表中的拉链法。(数组建立邻接表)图的dfsvoid add(int a,int b){ e[idx]=b,ne[idx]=h[a],h[a]=idx++;}图的...
2022-01-30 15:18:05
622
原创 BFS(宽度优先算法)
1.BFS简介 宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。其别名又叫BFS,属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。简单来说,bfs好像是一个耳听六路眼观八方的人,搜索时是一层一层的搜索的。BFS利用的数据结构是queue,空间复杂度为o(2^n),另外BFS可以用来解决最短路问题。BFS是一个从近到远的扩散过程。2.基本思想...
2022-01-30 13:22:45
17876
2
原创 DFS(深度优先搜索算法)
1.dfs基本思想dfs:深度优先搜索算法(英语:Depth-First-Search,DFS)是一种用于遍历或搜索树或图的算法.沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。属于盲目搜索。简单来说dfs可以看作是一个执着的人,优先往下走。搜索方式如图:2..
2022-01-27 20:24:31
39334
3
原创 C++ STL使用技巧
1.什么是STLSTL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库。它被容纳于C++标准程序库(C++ Standard Library)中,是ANSI/ISO C++标准中最新的也是极具革命性的一部分。该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性。 STL的一个重要特点是数据结构和算法的分离。尽管这是个简单的概念,但这种分离确实使得ST..
2022-01-25 20:17:05
889
原创 堆(数据结构)
1.堆的概念 如果有一个关键码的集合K = {k0,k1, k2,…,kn-1},把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足:Ki <= K2i+1 且 Ki<=K2i+2 ,则称为小堆(或大堆)。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。除了最后一层以外上面的节点但是非空的,最后一层节点是从左到右依次排布的。如图:...
2022-01-24 21:10:46
22700
1
原创 并查集(数据结构)
1.并查集基本功能并查集主要的两大功能:1)将两个集合合并。2)询问两个集合是否为同一个集合。大多数算法都可以先用暴力的做法先模拟一遍,然后在其中现在简便规律,并查集可以在近乎o(1)的时间完成这两个操作。2.并查集基本原理每个集合用一棵树来表示,树根的编号就是整个集合的编号,每个节点存储它的父节点,p[x]表示为x的父节点。如图所示:3.使用并查集的三个问题1)问题1:如何判断树根:if(p[x]==x) 。需要知道除了根节点以外其他p[x]!=x;2)问题2:如何
2022-01-23 15:40:35
394
原创 Trie 树(数据结构)
1.Trie树的概念 Trie树是数据结构比较简单的一种。Trie 树的基本用法是高效的存储和查找字符串集合的数据结构。Trie树也叫做字典树,它是一个树形结构。是一种专门处理字符串匹配的数据结构,用来解决在一组字符串集合中快速查找某个字符串。Trie树本质,利用字符串之间的公共前缀,将重复的前缀合并在一起。2.Trie树的操作2.1存储Trie树的存储是从根节点开始从前往后依次便利每一个字符。...
2022-01-23 11:33:23
7965
6
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人