算法学习
文章平均质量分 64
布布要成为最负责的男人
24届保研27届毕业,HNUCM->NUAA,全栈领域,冲击大厂高薪ing
展开
-
蓝桥杯2019国赛题:质数拆分(简单思维+背包)
蓝桥杯2019国赛题:质数拆分(简单思维+背包)原创 2023-04-03 16:01:25 · 288 阅读 · 2 评论 -
阶乘约数——蓝桥杯python组国赛题(C++、唯一分解定理)
n)的所有素数因子的若干个组成,而对于100!,我们可以把1到100中的每个数分解质因数,通过这些质因数很容易调配出其约数。这里遇到的问题,就是大数相除问题:通常情况,我们构造出来一个数字num以后需要验证(n!放到这道题,我们如果暴搜,基本上是跑不出来的,就算能跑出来,还得要去重,除此之外,数字可能很大,long long也是存不下去的。这是一种数学思维,自行证明起来也容易,想看那种严谨的数学思维推导的证明方法自行去搜索即可。任何一个大于1的数,都可以唯一分解成若干个质数的乘积。原创 2023-04-03 10:17:12 · 653 阅读 · 1 评论 -
acm省赛:高桥和低桥(三种做法:区间计数、树状数组、线段树)
第九届湖南省大学生acm程序设计大赛:高桥和低桥的三种解法原创 2023-03-21 16:47:36 · 1274 阅读 · 0 评论 -
HNUCM省赛训练赛第14场题解
HNUCM省赛训练赛第14场题解原创 2023-03-20 21:23:15 · 399 阅读 · 2 评论 -
ACM训练赛赛后补题:Happy Necklace(思维+递推+矩阵快速幂)
详细解答Happy Necklace(思维构建+递推+矩阵快速幂)原创 2023-03-18 21:52:10 · 551 阅读 · 0 评论 -
第十三届蓝桥杯A组:选数异或——三种解法(线段树、DP、ST表)
第十三届蓝桥A组D题(选数异或)的三种解法原创 2023-03-14 16:54:17 · 2323 阅读 · 0 评论 -
线段树——懒标记下放
线段树中的懒标记下放以及值的维护原创 2023-03-14 09:13:20 · 300 阅读 · 0 评论 -
HNUCM-1625:Tree
这道题属于连通块问题,问题的正解就是要能够遍历一个点,以这个点为根的情况下,结点的个数,如果结点的个数等于k,则可以成为一个连通块,如果结点的个数大于k,那么肯定输出NO,当结点个数小于k时,并到其他根上,直到满足条件为止。第 1 行,2 个整数 N,K。接下来 (N −1) 行,每行 2 个整数Ai,Bi,表示边。给出 N 个点的树和 K,问能否把树划分成 N/K个连通块,且每个连通块的点数都是 K。第 1 行,1 个整数 T,表示数据组数。(Ai,Bi)点用 1,2,…原创 2023-03-01 23:41:30 · 100 阅读 · 0 评论 -
一文彻底搞懂动态规划/动态规划模板(各类dp含完整例题集)
各类DP原创 2022-10-24 11:08:43 · 913 阅读 · 2 评论 -
算法学习:二叉树(包含二叉查找树、平衡二叉树)
一些二叉树的东西原创 2022-10-04 10:53:38 · 1819 阅读 · 0 评论 -
洛谷P2419:Cow Contest S(floyd的巧用)
floyd的巧用原创 2022-10-01 16:31:37 · 226 阅读 · 0 评论 -
算法学习-拓扑排序(思维例题)
拓扑排序,考验思维的例题原创 2022-10-01 11:09:27 · 1000 阅读 · 0 评论 -
最短路径算法总结
四个最短路径算法及其优化原创 2022-09-30 16:58:02 · 1117 阅读 · 1 评论 -
算法学习:链式前向星
链式前向星原创 2022-09-27 16:47:29 · 330 阅读 · 0 评论 -
2022年暑假ACM热身练习3(详细)
更难了。。。其中E题完全当做数学题做了,抓住两个关键点,推了很久,推导过程还利用了放缩的方法,然后和星鑫同志交流有了更好的方法。有两题(F和I)只有我一个人ac了,尽量详细的给大家讲讲里面的思想。我感觉这次热身练习收获还是有的,我尝试着使用了更为多维的目光看待汉诺塔问题。...原创 2022-07-23 10:05:30 · 1380 阅读 · 0 评论 -
题解:2022年暑假ACM热身练习2
好久没写题解了,自从天梯赛以后敲代码就很少了,院赛手也是很生,这一次就当做是找找状态,有些题还是有点难度的,或者说有点坑(感觉有些题放3个月前还对我不是问题。。。太久没做题题感直接下来了),分享一下下:题目描述“ 改革春风吹满地,不会AC没关系;实在不行回老家,还有一亩三分地。谢谢!(乐队奏乐)”话说部分学生心态极好,每天就知道游戏,这次考试如此简单的题目,也是云里雾里,而且,还竟然来这么几句打油诗。好呀,老师的责任就是帮你解决问题,既然想种田,那就分你一块。这块田位于浙江省温州市苍南县灵溪原创 2022-07-13 16:15:51 · 1129 阅读 · 5 评论 -
天梯赛L2-6 树的遍历
题目描述给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。输入格式:输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。输出格式:在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。输入样例:72 3 1 5 7 6 41 2 3 4 5 6 7输出样例:4 1 6 3 5 7 2这题就是让我换个建树的板子吧,新板子更容易理解不说,看起原创 2022-04-22 20:55:56 · 120 阅读 · 0 评论 -
牛客网搜索专题赛1007:迷宫
题目描述这是一个关于二维迷宫的题目。我们要从迷宫的起点 ‘S’ 走到终点 ‘E’,每一步我们只能选择上下左右四个方向中的一个前进一格。 ‘W’ 代表墙壁,是不能进入的位置,除了墙壁以外的地方都可以走。迷宫内的 ‘D’ 代表一道上锁的门,只有在持有钥匙的时候才能进入。而 ‘K’ 则代表了钥匙,只要进入这一格,就会自动地拿到钥匙。最后 ‘.’ 则是代表空无一物的地方,欢迎自在的游荡。本题的迷宫中,起点、终点、门跟钥匙这四个特殊物件,每一个恰好会出现一次。而且,此迷宫的四周 (最上面的一行、最下面的一行、最左原创 2022-03-27 10:22:20 · 1462 阅读 · 0 评论 -
树状数组题型解析(强推)
关于树状数组的深入理解学习建议看这位大佬的文章:树状数组简单易懂我这里直接给出最经典的图:lowbit函数用于取到最低的1的位置,不做多余阐述。定义两个数组,一个是题目要求的数组,还有一个就是f数组,f数组的作用:f[i]就表示第i个点往前数lowbit(i)个点的区间和。题型一:单点修改,区间查询题目描述如题,已知一个数列,你需要进行下面两种操作:将某一个数加上 x求出某区间每一个数的和输入格式第一行包含两个正整数 n,m分别表示该数列数字的个数和操作的总个数。第二行包含 n原创 2022-03-26 00:23:47 · 449 阅读 · 0 评论 -
洛谷3374:树状数组1(线段树/树状数组模板)
题目描述如题,已知一个数列,你需要进行下面两种操作:将某一个数加上x求出某区间每一个数的和输入格式第一行包含两个正整数 n,m,分别表示该数列数字的个数和操作的总个数。第二行包含n个用空格分隔的整数,其中第i个数字表示数列第i项的初始值。接下来m行每行包含3个整数,表示一个操作,具体如下:1 x k 含义:将第x个数加上k2 x y 含义:输出区间[x,y]内每个数的和输出格式输出包含若干行整数,即为所有操作2的结果。输入输出样例输入:5 51 5 4 2 31 1 32原创 2022-03-23 21:31:39 · 1380 阅读 · 1 评论 -
博弈论板子代码
总共涉及到的四个博弈论题,具体看我的下列四篇文章:尼姆博弈巴什博奕威佐夫博弈斐波那契博弈尼姆博弈#include<bits/stdc++.h>using namespace std;int n,t,ans;int main(){ cin>>n; while(n--)scanf("%d",&t),ans^=t; if(ans)cout<<"先手必胜"<<endl; else cout<<"先手必败"<<e原创 2022-03-19 22:45:31 · 582 阅读 · 0 评论 -
博弈论——斐波那契博弈Fibonacci Game
题目描述有一堆个数为n(n≥2)的石子,游戏双方轮流取石子,规则如下:先手不能在第一次把所有的石子取完,至少取1颗;之后每次可以取的石子数至少为1,至多为对手刚取的石子数的2倍。结论:当且仅当石子数为斐波那契数时,先手必败。代码如下:#include<bits/stdc++.h>using namespace std;map<int,int>m;int f[1005];void solve(){ f[1]=f[2]=1; for(int i=3;i<=原创 2022-03-19 21:58:46 · 3998 阅读 · 0 评论 -
博弈论——威佐夫博弈 Wythoff Game
题目描述:取石子游戏有两堆石子,石子数可以不同。两人轮流取石子,每次可以在一堆中取,或者从两堆中取走相同个数的石子,数量不限,取走最后一个石头的人获胜。判定先手是否必胜。引入(1+5^(1/2))/2,曾经可能是有一次高考考到的“维纳斯”利用的是黄金分割0.618,我想很多人应该也不陌生了,黄金分割数是一个无理数,其值为(1+5^(1/2))/2。记得上一次在程序中体现这两个数,还是在推导出斐波那契数列的通项公式以后学会的O(1)算法(请看下文):斐波那契数列O(1)算法而这题则是威佐夫博弈,其结原创 2022-03-19 19:58:56 · 575 阅读 · 0 评论 -
博弈论——巴什博弈Bash Game
题目描述有 1 堆石子,总个数是 n ,两名玩家轮流在石子堆中拿石子,每次至少取 1 个,至多取 m 个。取走最后一个石子的玩家为胜者。判定先手和后手谁胜。结论: n%(m+1)=0时,先手必败;否则先手必胜。证明:①当m>=n时,显然先手必胜。②当m+1=n时,无论先手取多少个,后手都能一次全部取完,先手必败。③当n%(m+1)=0时,假设先手取了x个,那么后手一定可以取(m+1)-x个。因此无论先手怎么取,聪明的后手都会使得最后的物品总数量是m+1的倍数,慢慢的就会到②的情况,因此先手原创 2022-03-19 18:23:26 · 2347 阅读 · 1 评论 -
Acwing:最长回文子串
题目描述给定一个字符串,请你求出其中的最长回文子串的长度。例如,给定字符串 Is PAT&TAP symmetric?,最长回文子串为 s PAT&TAP s,其长度是 11。输入格式包含一个非空字符串。输出格式输出一个整数,表示给定字符串的最长回文子串的长度。数据范围给定字符串的长度不超过 1000。输入样例:Is PAT&TAP symmetric?输出样例:11分析: 先讲讲最暴力的解法。先套用两层循环得到字符串s的子串,光是这一步骤就得用掉O(n^2原创 2022-03-13 16:23:15 · 2132 阅读 · 0 评论 -
HNUCM 1985: 小h的书桌
题目描述强迫症小h在整理书库,准备把书全部摆放在书桌上,摆放若干堆。小h要求:书桌上的每堆书必须按照书本厚度从小到到大排序(也就是每堆书下面的不能比上面的薄,可以一样)。小h会从书库里一本一本地拿书出来,然后进行摆放,请问小h最少需要摆放多少堆,才能摆好所有书籍。输入第一行一个整数,表示书库书本总数量(1≤n≤10^5)第二行个整数,表示书本厚度(1≤ai≤30000)输出输出一个整数,表示小h最少需要摆放堆数。样例输入8389 207 155 300 299 170 158 65样原创 2022-03-12 22:40:10 · 511 阅读 · 1 评论 -
动态规划:放苹果
题目描述把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。输入每行均包含二个整数M和N,以空格分开。1<=M,N<=10。输出对输入的每组数据M和N,用一行输出相应的K。样例输入7 3样例输出8分析:数据规模较小,明显可以暴力递归。也可以递推。用数组f[i][j]表示i个苹果放到j个盘子里的方案数。①假设苹果数为0,那么明显分法为1,因为题目要求允许盘子空着不放。②假设盘子数为0,那么原创 2022-03-12 10:31:37 · 642 阅读 · 3 评论 -
动态规划:排队买票问题
问题描述一场球赛开始前,售票工作正在紧张进行中。每张球票为50元,有m+n个人排队等待购票,其中有m 个人手持50元的钞票,另外n个人手持100元的钞票。求出这m+n个人排队购票,使售票处不至出现找不开钱的局面的不同排队种数 。(约定:开始售票时售票处没有零钱;拿同样面值钞票的人对换位置为同一种排队。)分析:这题可以用递归或者递推(动态规划)来解决,在数据大且要求多组输入的情况下,递推提前打表是便捷且快速的。用数组dp[i][j]表示有i个拿50元票的人和j个拿100元票的人的排队方案。①假设此时n=原创 2022-03-12 10:06:03 · 3711 阅读 · 2 评论 -
记录我的拉胯时刻
这两道题。。。其实吧,挺简单的。但是!!!由于最近做了一段时间的bfs+优先队列的题目,我连复杂度都不管了。居然直接错了lz6次!我认为这是极其一个丢人的时刻,大一的孩子们都很多做出来了这两题。。。另外,还被老师批评了。。着实没有想出来这道题,老师说这是LIS的模板题。。。好吧,见识还是少了,应有的批评。。选拔赛第一场,大好的局势,很可能要被我第二场的灾难性表现拉下水。没有什么好找借口的,有些人会安慰我,是一时的失常,唉,如果强到一定程度,怎么会遇到这种问题呢。感觉有一点点对不起自己..原创 2022-03-11 23:05:44 · 526 阅读 · 5 评论 -
博弈论——Nim游戏
一个思考给定N堆物品,第i堆物品有Ai个。两名玩家轮流行动,每次可以任选一堆,取走任意多个物品,可把一堆取光,但不能不取。取走最后一件物品者获胜。两人都采取最优策略,问先手是否必胜。相信acmer们都见过Alice和Bob这两个名字,两个大神经常会用聪明的智慧来博弈。他们总是会采取最优原则,游戏走的每一步,都不是为了走而走,而是为了掐死对手,这就是著名的博弈论。他属于公平组合游戏博弈论的定理基本上博弈论的最终推导都离不开这几个定理,十分的离散数学!定理有三:1、没有后继状态的状态是必败状态。2、原创 2022-03-10 21:56:33 · 4342 阅读 · 3 评论 -
HNUCM 1284:二叉树遍历
题目描述二叉树的前序、中序、后序遍历的定义:前序遍历:对任一子树,先访问跟,然后遍历其左子树,最后遍历其右子树;中序遍历:对任一子树,先遍历其左子树,然后访问根,最后遍历其右子树;后序遍历:对任一子树,先遍历其左子树,然后遍历其右子树,最后访问根。给定一棵二叉树的前序遍历和中序遍历,求其后序遍历(提示:给定前序遍历与中序遍历能够唯一确定后序遍历)。输入两个字符串,其长度n均小于等于26。第一行为前序遍历,第二行为中序遍历。二叉树中的结点名称以大写字母表示:A,B,C…最多26个结点。输出原创 2022-03-05 16:01:54 · 115 阅读 · 0 评论 -
HNUCM天梯赛选拔赛第一场
题目A:颜色叠加B:勤劳的老杨C:秘密大厦的访客D:最大能量E:最大素数F:最大计分G:密匙H:X星大学A:颜色叠加题目描述热爱科学的Kimi这段时间在研究各种颜色,今天他打算做一个关于颜色叠加的小实验。Kimi有很多张蓝色和黄色的长方形透明塑料卡片。众所周知,如果把蓝色和黄色混合在一起就会变成绿色。因此,Kimi对着光观察蓝色透明卡片和黄色透明卡片的叠加部分也就可以看到绿色啦。假设在一个二维平面中,一张蓝色的透明卡片和一张黄色的透明卡片都与坐标轴平行放置,即卡片的横边与X轴平行,竖边与Y轴平行。原创 2022-03-04 22:39:47 · 806 阅读 · 0 评论 -
快速幂?再加个位运算吧
快速幂概念其实就是算a^n的操作,但是有些时候,如果用暴力法直接算,复杂度是O(n),有时候是会造成超时的。快速幂的方法相信很多人早已经掌握了,先算a^2,再算a^2的平方,一直算到n次幂。这其实就是典型的分治思想,复杂度为O(logn)。直接上个代码:int fastPow(int a,int n){ if(n==1)return a; int temp=fastPow(a,n/2); if(n%2==1)//奇数个a return temp*temp*a; else//偶数个a r原创 2022-03-03 16:03:37 · 496 阅读 · 0 评论 -
天梯赛L2-10:排座位
有关于并查集的板子和优化可以看这个文章,用“How Many Tables”来讲解:“How Many Tables”(并查集基本到优化)题目描述布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位。无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对任何一对客人,请编写程序告诉主人他们是否能被安排同席。输入格式:输入第一行给出3个正整数:N(≤100),即前来参宴的宾客总人数,则这些人从1到N编号;M为已知两两宾客之间的关系数;K为查询的条数。随后M行,每行给出一对宾客原创 2022-03-02 21:28:19 · 118 阅读 · 0 评论 -
hdu 1213 “How Many Tables”(并查集基本到优化)
题目描述How Many TablesToday is Ignatius’ birthday. He invites a lot of friends. Now it’s dinner time. Ignatius wants to know how many tables he needs at least. You have to notice that not all the friends know each other, and all the friends do not want to s原创 2022-03-02 17:03:06 · 383 阅读 · 0 评论 -
算法学习:最短路径SPFA算法
讲解SPFA使用的例题:Problem Description在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗?Input输入包括多组数据。每组数据第一行是两个整数N、M(N<=100,M<=10000),N表示成都的大街上有几个路口,标号为1的路口是商店所在地,标号为N的路口是赛场所在地,M则表示在成都有几条路。N=M=0表示原创 2022-03-01 17:09:43 · 325 阅读 · 0 评论 -
算法学习:最小生成树
最小生成树是无向图中的一个问题,很常见。在无向图中,连通而且不含有圈(环路)的图称为树。最小生成树(MST)的基本模型可以用下面的题目描述:题目描述某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。输入测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行原创 2022-02-23 15:54:32 · 506 阅读 · 0 评论 -
最短路径例题(Floyd、Dijkstra)
关于这两个最短路径的算法的阐述和理解,可以看本人的这篇文章,希望能给你们带来帮助:算法学习:最短路径一、弗洛伊德最短路径算法题目描述在带权有向图G中,求G中的任意一对顶点间的最短路径问题,也是十分常见的一种问题。解决这个问题的一个方法是执行n次迪杰斯特拉算法,这样就可以求出每一对顶点间的最短路径,执行的时间复杂度为O(n3)。而另一种算法是由弗洛伊德提出的,时间复杂度同样是O(n3),但算法的形式简单很多。在本题中,读入一个有向图的带权邻接矩阵(即数组表示),建立有向图并按照以上描述中的算法求原创 2022-02-22 12:32:31 · 4007 阅读 · 1 评论 -
算法学习:最短路径(Floyd、Bellman-ford、Dijkstra)
一、使用应用场景(1)图的规模小,用Floyd。如果边的权值有负数,需要判断负圈。(2)图的规模大,且边的权值非负,用Dijkstra。(3)图的规模大,且边的权值有负数,用SPFA。需要判断负圈。后面的讲解都已hdu 2544为例,讲解不同算法的思想以及模板代码。Problem Description在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可原创 2022-02-21 16:17:08 · 921 阅读 · 0 评论 -
HNUCM 1325:fps游戏
题目描述fps游戏是第一人称射击游戏。这类游戏有一个很重要的技巧也是基本功之一的,是压枪。为了模拟真实环境,在游戏里你每开一枪,枪口都会往上和左右浮动。如果你想使枪口在某个范围内,为了提高精准度,你就必须压枪。而且每把枪的后坐力不同和有效打击距离不同,就需要对每把枪都很熟悉,能很快的计算出在多远距离外开枪枪口会往上和左右浮动多少。现在只考虑枪的垂直浮动。假设在d米外有一个靶子,初始枪口正对靶心的圆心,靶心是个半径为r米的圆,现在你要射击c次。(你可以把枪看成一个点)。为了省力,要使压枪次数最少原创 2022-02-03 10:27:11 · 96 阅读 · 0 评论