算法学习
阶段性对算法的部分学习
代码如诗词
这个作者很懒,什么都没留下…
展开
-
力扣面试题 17.05. 字母与数字
如果前缀和出现多次,我们为了达成最长子数组这一特点,我们只需要记录不同前缀和第一次出现的位置。这里使用哈希表来记录每一个前缀和第一次出现的下标,由于最后的答案需要返回一个数组我这边使用。这里我们可以使用前缀和的思路来做,将字母转换成+1,数字转换成-1,如果。题解:题目需要我们返回字母与数字个数相同的最长子数组,工具类的复制数组方法。原创 2023-03-15 09:52:45 · 130 阅读 · 1 评论 -
109. 有序链表转换二叉搜索树
力扣第109题的一点思路与代码原创 2022-09-13 20:56:13 · 210 阅读 · 0 评论 -
120. 三角形最小路径和
力扣刷题第 120题原创 2022-09-13 20:40:54 · 139 阅读 · 0 评论 -
采药
典型的01背包问题,直接上式子dp[i][j]=max(dp[i-1][j],dp[i-1][j-c[i]+v[i]);dp[i][j]为有当前i这个物体后j个空间的两种可能即选或者不选不选就为dp[i-1][j];选就为dp[i-1][j-c[i]+v[i];c[i]为这个物体所占用的空间v[i]为这个物体的价值这个式子在解01背包问题的时候时常会用到,常见的01背包问题都是用于求最大值,方法总和,及最小值若用个一维数组常用式子为dp[j]=max(dp[j],dp[j-c[i]+v[原创 2021-03-14 20:47:52 · 69 阅读 · 0 评论 -
P1086 [NOIP2004 普及组] 花生采摘
乍看还以为是个搜索,dfs都打好了,用个样例一输出发现不对,这第二个样例我输出的时间比较长大概花了几秒钟,并且这还不是最大规模,于是重新读题,然后发现似乎可以用贪心来做注释见代码#include <bits/stdc++.h>using namespace std;int n,m,k,top;int ans;int mp[200][200];struct g{ int x,y,peanut; bool operator<(const g&rhs)cons原创 2021-03-18 20:53:05 · 459 阅读 · 0 评论 -
进制转换——任意进制
P1143 进制转换 链接:link如何将一个数转成其他进制,主要思路转成10进制后再进行短除法倒取余数最后输出直接贴代码#include <bits/stdc++.h>using namespace std;string a;int m,n;char oti(int a){ if(a>=10&&a<=15) return a+'A'-10; else if(a>=0&&a<=9) return a+'0';原创 2021-03-10 20:51:15 · 128 阅读 · 0 评论 -
二分及答案
考场上的题目常常因数据量太大而经常超时,这时候面对大量的数据需要一个longn的算法自己想并不好想出来,这时候二分就成为你的一个不错的选择首先二分为什么能达到longn的一个复杂度,因为在针对一个有序数列时我们每次都会将另外一半舍去这里放两个题目跳石头路标设置这两题都可以使用同一个二分模版这里放上ac代码//路标设置#include<bits/stdc++.h>using namespace std;const int T=11000000;int a[T];int lg,原创 2021-04-13 14:44:27 · 51 阅读 · 0 评论 -
公交换乘
著名旅游城市 B 市为了鼓励大家采用公共交通方式出行,推出了一种地铁换乘公交车的优惠方案:在搭乘一次地铁后可以获得一张优惠票,有效期为 45 分钟,在有效期内可以消耗这张优惠票,免费搭乘一次票价不超过地铁票价的公交车。在有效期内指开始乘公交车的时间与开始乘地铁的时间之差小于等于 45 分钟,即:搭乘地铁获得的优惠票可以累积,即可以连续搭乘若干次地铁后再连续使用优惠票搭乘公交车。搭乘公交车时,如果可以使用优惠票一定会使用优惠票;如果有多张优惠票满足条件,则优先消耗获得最早的优惠票。现在你得到了小轩最近原创 2021-02-27 09:28:32 · 488 阅读 · 0 评论 -
P1101 单词方阵
这题目首先必须要明确是从y开始搜索,然后8个方位开始搜索,并且还要注意的是我们不可能在初始的数据上改变,我们必须要用个新的数组存储哪些是我们应该要保存的然后就有了下面的代码#include <bits/stdc++.h>using namespace std;char a[110][110];int n;const char p[] = {"yizhong"};int nx[] = {1, -1, 0, 0, 1, -1, 1, -1};int ny[] = {0, 0, 1, -原创 2021-03-17 14:28:47 · 55 阅读 · 0 评论 -
串逐位和
串逐位和给定一个由数字组成的字符串,我们希望得到它的各个数位的和。比如:“368” 的诸位和是:17这本来很容易,但为了充分发挥计算机多核的优势,小明设计了如下的方案:int f(char s[], int begin, int end){int mid;if(end-begin==1) return s[begin] - ‘0’;mid = (end+begin) / 2;return ____________________________________; //填空}int m原创 2021-03-07 10:34:05 · 120 阅读 · 0 评论 -
常用程序笔记
#include<bits/stdc++.h>using namespace std;void quick_sort(int s[],int left,int right)//快排{ if(left<right) { int i=left,j=right,x = s[left]; while(i<j) { while(i<j&&s[j]>=x)j--;原创 2021-03-12 15:42:43 · 84 阅读 · 0 评论 -
第十届蓝桥杯省赛:等差数列
试题 H: 等差数列时间限制: 1.0s 内存限制: 256.0MB 本题总分:20 分【问题描述】数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一部分的数列,只记得其中 N 个整数。现在给出这 N 个整数,小明想知道包含这 N 个整数的最短的等差数列有几项?【输入格式】输入的第一行包含一个整数 N。第二行包含 N 个整数 A1, A2, · · · , AN。(注意 A1 ~ AN 并不一定是按等差数列中的顺序给出)【输出格式】输出一个整数表示答案。【样例输入】原创 2021-03-02 10:10:40 · 265 阅读 · 2 评论 -
2018年蓝桥杯c组
2018年蓝桥杯c组的题目分析长话短说这是2018的蓝杯杯的第一题代码第二题开始第三题第四题第五题第六题水题第七题第八题第九题最后一题第十题长话短说这是2018的蓝杯杯的第一题代码标题:哪天返回小明被不明势力劫持。后莫名其妙被扔到x星站再无问津。小明得知每天都有飞船飞往地球,但需要108元的船票,而他却身无分文。他决定在x星战打工。好心的老板答应包食宿,第1天给他1元钱。并且,以后的每一天都比前一天多2元钱,直到他有足够的钱买票。请计算一下,小明在第几天就能凑够108元,返回地球。要求提交原创 2021-02-19 21:25:50 · 366 阅读 · 2 评论 -
蓝桥杯c++c组2019初赛年号字串
试题C:年号字串小明用字母 A 对应数字 1,B 对应 2,以此类推,用 Z 对应 26。对于 27以上的数字,小明用两位或更长位的字符串来对应,例如 AA 对应 27,AB 对应 28,AZ 对应 52,LQ 对应 329。请问 2019 对应的字符串是什么?答案:BYQ#include <bits/stdc++.h>using namespace std;int main(){ int n; cin>>n; string str;原创 2021-03-22 18:36:50 · 197 阅读 · 0 评论 -
立方尾不变
立方尾不变有些数字的立方的末尾正好是该数字本身。比如:1,4,5,6,9,24,25,…请你计算一下,在10000以内的数字中(指该数字,并非它立方后的数值),符合这个特征的正整数一共有多少个。请提交该整数,不要填写任何多余的内容。分析:100000的立方后面15个0int肯定吃不消,unsigned long long 22位好像可以,不过既然只要尾数就对其每一步进行取模就可以得到正确答案。#include<bits/stdc++.h>using namespace std;t原创 2021-03-07 09:40:07 · 312 阅读 · 0 评论 -
幂次方
题目描述任何一个正整数都可以用 22 的幂次方表示。例如 137=27+23+2^0137=27+23+20。同时约定方次用括号来表示,即 a^bab可表示为 a(b)a(b)。由此可知,137137 可表示为 2(7)+2(3)+2(0)2(7)+2(3)+2(0)进一步:7= 22+2+207=22+2+20( 2^121用 22 表示),并且 3=2+2^03=2+20。所以最后 137137 可表示为 2(2(2)+2+2(0))+2(2+2(0))+2(原创 2021-03-08 18:59:46 · 399 阅读 · 0 评论 -
P1259 黑白棋子的移动
有 2n2n 个棋子排成一行,开始为位置白子全部在左边,黑子全部在右边,如下图为 n=5n=5 的情况:○○○○○●●●●●移动棋子的规则是:每次必须同时移动相邻的两个棋子,颜色不限,可以左移也可以右移到空位上去,但不能调换两个棋子的左右位置。每次移动必须跳过若干个棋子(不能平移),要求最后能移成黑白相间的一行棋子。如 n=5n=5 时,成为:○●○●○●○●○●任务:编程打印出移动过程。输入格式一个整数 nn。输出格式若干行,表示初始状态和每次移动的状态,用"o"表示白子,"*“表示黑子,原创 2021-03-08 20:37:02 · 365 阅读 · 0 评论 -
奇妙的数字
奇妙的数字小明发现了一个奇妙的数字。它的平方和立方正好把0~9的10个数字每个用且只用了一次。你能猜出这个数字是多少吗?请填写该数字,不要填写任何多余的内容。分析:一个数字平方和立方正好将这10个数字每个用一次,首先平方不可能低于三位数,如果低于三位就不可能用完这10个数,也不可能大于三位数,然后直接枚举就好了#include <stdio.h>#include <string.h>#include<bits/stdc++.h>using namespa原创 2021-03-07 10:57:32 · 307 阅读 · 0 评论 -
数字三角形
数字三角形这题比较经典,我们需要从上到下或者从下到上dp求解从上到下#include<bits/stdc++.h>using namespace std;long long dp[200][200];int main(){ int r; cin>>r; for(int i=1;i<=r;i++) { for(int j=1;j<=i;j++) { cin>>原创 2021-04-13 19:43:24 · 55 阅读 · 0 评论 -
20年c语言c组 子串分值和
暴力不尝为一种骗分的做法原创 2021-03-24 18:52:38 · 205 阅读 · 0 评论 -
2017蓝桥杯c组
第一题标题:贪吃蛇长度±------------------------------------------------+| || H###### #### || # # # || # #原创 2021-02-23 10:50:05 · 290 阅读 · 0 评论 -
质数 蓝桥杯筛法解决
【问题描述】我们知道第一个质数是 2、第二个质数是 3、第三个质数是 5……请你计算第 2019 个质数是多少?【答案提交】这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。#include <bits/stdc++.h>using namespace std;const int maxx =100000;int vis[maxx];int main(){ vis[0] = vis[1]原创 2021-03-09 19:24:07 · 289 阅读 · 0 评论 -
2019年c组c语言决赛平方拆分
问题描述】将 2019 拆分为若干个两两不同的完全平方数之和,一共有多少种不同的方法?注意交换顺序视为同一种方法,例如 132 + 252 + 352 = 2019 与 132 + 352 +252 = 2019 视为同一种方法。【答案提交】这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。既然是结果填空题,就没有必要死太多脑细胞了,直接暴搜就行了,两种写法#include <bits/stdc++.h>原创 2021-03-23 17:56:13 · 381 阅读 · 0 评论 -
洛 P1162填涂颜色
题目描述由数字00组成的方阵中,有一任意形状闭合圈,闭合圈由数字11构成,围圈时只走上下左右44个方向。现要求把闭合圈内的所有空间都填写成22.例如:6 \times 66×6的方阵(n=6n=6),涂色前和涂色后的方阵如下:0 0 0 0 0 00 0 1 1 1 10 1 1 0 0 11 1 0 0 0 11 0 0 0 0 11 1 1 1 1 10 0 0 0 0 00 0 1 1 1 10 1 1 2 2 11 1 2 2 2 11 2 2 2 2 11 1 1 1 1原创 2021-04-12 20:35:41 · 80 阅读 · 0 评论 -
P1618 三连击(升级版)
题目描述将 1, 2,\ldots, 91,2,…,9 共 99 个数分成三组,分别组成三个三位数,且使这三个三位数的比例是 A:B:CA:B:C,试求出所有满足条件的三个三位数,若无解,输出 No!!!。//感谢黄小U饮品完善题意输入格式三个数,A,B,CA,B,C。输出格式若干行,每行 33 个数字。按照每行第一个数字升序排列。输入 #11 2 3192 384 576219 438 657273 546 819327 654 981全排列问题,满足一定条件输出直接使用df原创 2021-03-02 21:13:56 · 78 阅读 · 0 评论 -
自然数的组合
任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。现在给你一个自然数n,要求你求出n的拆分成一些数字的和。每个拆分后的序列中的数字从小到大排序。然后你需要输出这些序列,其中字典序小的序列需要优先输出。输入格式输入:待拆分的自然数n。输出格式输出:若干数的加法式子。这里简单分析一下题目,他说对任何一个大于1的自然数n可以拆分成若干个小于n的自然数的和,那么如何拆分我们是否可以用几个for来进行一个模拟,但只能得到部分的答案,同样是暴力我们自然联想到了dfs那么这个dfs又怎么写?我们需原创 2021-04-12 20:15:20 · 341 阅读 · 0 评论 -
P1135 奇怪的电梯
洛谷:link题目比较水深搜,广搜,动态规划都给它安排上dpf#include <bits/stdc++.h>using namespace std;int N,A,B;int a[220];int vis[220];int ans = 0x3f3f3f3f;void dfs(int x,int step){ if(step>=ans) return ;//剪枝 if(x==B) { ans = min(step,ans);原创 2021-03-21 18:08:53 · 76 阅读 · 0 评论 -
字符串循环左移
看起来很复杂的一个题目,似乎需要用到很多的循环来左移,但c++的string太强大了,这里需要介绍string.substr(num)从n后截取到string结束为止与它的另一种重载string.substr(num,length)从num开始截取length个字符,不过这个测试数据中有n大于字符串长度的会造成越界,我们只需要对这个n取模下这个长度就不会溢出了#include <bits/stdc++.h>using namespace std;int main(){ ios::原创 2021-03-19 18:29:19 · 92 阅读 · 0 评论 -
2019初赛蓝桥杯 旋转
蓝桥杯2019 第十届 c/c++ c组 编程大题 第六题 旋转矩形输入 n,m 接下来每行输入m个数据共输入n列 返回顺时针旋转90°后的矩形例输入:3 43 2 5 81 0 2 47 6 0 8输出:7 1 36 0 20 2 58 4 8思路拿几个下标找规律,然后直接输出#include <bits/stdc++.h>using namespace std;int n,m;int a[1000][1000];int i,j;int main(){原创 2021-03-01 11:39:40 · 141 阅读 · 0 评论 -
2019蓝桥杯人物相关性分析
用string.find()直接枚举,能拿45分不知道是哪里错误了,如果请大佬指出,如果对string.find的时间复杂度有质疑,请问度娘#include <bits/stdc++.h>using namespace std;int cnt,k;bool temp = true;char f[2][20] = {"Alice", "Bob"};bool check(string &a, int &pa, int &pb)//pa指的是之前Alice出现的位置原创 2021-03-23 13:14:15 · 275 阅读 · 0 评论 -
P1057 [NOIP2008 普及组] 传球游戏
这题用dp或者dfs都能做,对于新手最不友好的就是dp了,这里说明一下我们这个dp[i][j]表示的是传了i轮第j个同学路径数之和,我们这先考虑没有人没有传也算是一种情况,然后针对不同的j有可能的几种情况就是当我是第一个时那么就可以是第二个和最后一个传给我,我是最后一个时可以是第一个和n-1个传给我,当我在中间时就可以是左右两边的传给我那么我们可以写出这样的递推式#include <bits/stdc++.h>using namespace std;int dp[31][31], m,原创 2021-04-13 20:06:51 · 240 阅读 · 0 评论 -
P1149 [NOIP2008 提高组] 火柴棒等式
给你n根火柴棍,你可以拼出多少个形如“A+B=CA+B=C”的等式?等式中的AA、BB、CC是用火柴棍拼出的整数(若该数非零,则最高位不能是00)。用火柴棍拼数字0-90−9的拼法如图所示:注意:加号与等号各自需要两根火柴棍如果A≠BA=B,则A+B=CA+B=C与B+A=CB+A=C视为不同的等式(A,B,C>=0A,B,C>=0)nn根火柴棍必须全部用上输入格式一个整数n(n<=24)n(n<=24)。输出格式一个整数,能拼成的不同等式的数目。输入输出样例原创 2021-03-04 20:27:59 · 265 阅读 · 1 评论 -
1608. 特殊数组的特征值
1608.特殊数组的特征值。原创 2022-09-12 09:01:55 · 141 阅读 · 0 评论 -
快排
快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用。#include <bits/stdc++.h>using namespace std;void quick_sort(int a[],int left,int right){ if(left<right) { int i=left,r = right,x = a[left]; while(i<r) {原创 2021-03-06 09:38:25 · 56 阅读 · 0 评论 -
最短路径
Dijkstra 算法 只算一个点到其它点的最短路径效率高取一点v[0]作起点,相信点为权值否则为无限大找与v[0]相邻最近的点v[k]比较是直接连短还是经过v[k]更短并更新** 不能用于算有带负权值边的最短路径 **Floyd 算法 权重可以为负,但不能有权重为负的回路可以用来算全局最短路径但效率较低Dijkstra#include<bits/stdc++.h>using namespace std;int e[10][10],dis[10],book[10],i,j.原创 2021-02-21 11:33:51 · 81 阅读 · 0 评论