自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

原创 poj 3126 prime path BFS+素数筛打表

题目大意:给出两个四位素数,求一个素数转化为另外一个素数需要多少步,一次只能转换一个数,并且转换之后的另外一个数也为素数。直接给出代码,在poj中好像AC不了,之后会更新修改后AC的代码#include<iostream>#include<cstring>#include<queue>using namespace std;//#define myteststruct node{ int x,step;};bool vis[10010],flag[.

2021-07-13 22:07:22 297 1

原创 高精度乘(C++)

这里写的是大数×小数,以后会发大数×大数的代码。代码:#include<iostream>#include<vector>using namespace std;vector<int> mul(vector<int> &A,int b){ vector<int> c; int t = 0; for(int i = 0;i<A.size() || t; i++){ if(i<A.size()) t += A[

2021-07-13 21:55:14 174

原创 高精度减(C++)

这里直接给出代码,里面有注释。#include<iostream>#include<vector>using namespace std;//判断A与B的大小 bool cmp(vector<int> &A,vector<int> &B){ if(A.size() != B.size()){ return A.size() > B.size(); } for(int i = A.size()-1; i&g

2021-07-13 21:53:34 192

原创 高精度加C++

给定两个大数A,B,求这两个数之和。对于一般的A+B,我们用long long类型的一般都能AC,对于两个个位数很大的数相加就不适用了,因此我们需要用一个数组储存这两个数进行相加,并把相加结果储存到另外一个数组中即可。这里使用vector数组进行储存。#include<iostream>#include<vector>using namespace std;vector<int> add(vector<int> &A, vector&lt

2021-07-13 21:45:26 209

原创 二进制法求0~n-1的所有子集与特定个数子集

一个含有n个元素的集合中子集的个数为2[^n]个,因此可以使用二进制进行对照。其子集与二进制数对应的关系如下所示。如当n=3时:因此,每个子集对应一个二进制数,每个二进制中的1对应这个子集的某个元素,且自己中的元素没有顺序。因为二进制数的个数为2[n],所以子集个数为2[n]。void print(int n){ //i为0~2^n的数,每个i的二进制数对应一个子集。 for(int i = 0;i<(1<<n);i++){ //打印一个子集,i的二进制中的所有的1,空集既

2021-07-11 20:16:29 183

原创 五星填数(全排列)

在五角星图案节点(层序从0-9)上填入数字:1~12,不包括7和11每条直线数字之和相等旋转或镜像后相同的算一种:如图为一种解要想解决这道题我们需要对10个数字的每一种排列方法都要测试一次,由此可以想到全排列。代码如下:#include<iostream>#include<cstdio>#include<algorithm>using namespace std;#define Swap(a,b) {int temp = a; a = b; b =

2021-07-11 18:50:01 1560

原创 最长回文子串,输出此子串(leetcode 5)

题目描述: 给你一个字符串s输出其含有的最长的回文字符串样例:ASDZCSZXXZSCZQWSA输出:

2021-05-28 20:43:27 111

原创 Manacher(寻找最长回文子串,笔记用)

题目描述;给你一个字符串找出其最长的回文子串#include<bits/stdc++.h>using namespace std;const int maxn = 100010;char str[maxn]; //原字符串 char tmp[maxn<<1];//转换后的字符串 int len[maxn<<1];//转换字符串 int init(char *st){ int i,len = strlen(st); //字符串开头增加一个特殊

2021-05-27 21:35:25 77

原创 AC自动机

给你n个zifuchuang#include <queue>#include <cstdlib>#include <cmath>#include <cstdio>#include <string>#include <cstring>#include <iostream>#include <algorithm>using namespace std;typedef long long ll.

2021-05-27 21:32:06 67

原创 第十一届河南省ACM Gene mutation

提交链接:Gene mutation题意就是给你一个x序列和y序列,然后从x序列中查找可以与y序列中所有的数加或减一个固定数相匹配的序列个数代码如下:#include<bits/stdc++.h>using namespace std;int n, x[20010], c, y[15];//b作为临时数组int b[15];int res; int sum(int n, int x[], int c, int y[]){ int ans = 0;...

2021-05-24 19:01:34 102

原创 第十一届河南省ACM C题山区修路

题目链接:山区修路经过分析可以得知可以使用动态规划解题,不过时间复杂度并不是最优。可以通过枚举进行解题,只需遍历所有数据一次,时间复杂度为O(n)依照范例进行算法解释,先研究X,可以知道修建斜坡时的费用为|H[i]-H[i-1]|*X,不过在修建之前我们可以通过填高一些高度来降低总费用,比如2和3之间,如果直接建造斜坡那么将花费(3-2)*2=2的费用,如果我们将2增高1米,那么只需要花费1的平方的费用既1万元,此时第一个与第二个山的高度相等,不需要额外建立斜坡。3和5同理,不过从5-&g...

2021-05-18 20:52:58 266

原创 leetcode56 合并区间(双指针)

首先为了方便合并先将集合按照每个区间的第一个元素进行排序:sort(A.begin(),A.end());AC代码:class Solution {public: vector<vector<int>> merge(vector<vector<int>>& A) { //定义ans储存答案 vector<vector<int>> ans; //...

2021-05-15 18:36:59 145

原创 leetcode 搜索插入位置(c++,二分)

直接二分模板好吧,一行水过class Solution {public: int searchInsert(vector<int>& nums, int target) { return lower_bound(nums.begin(),nums.end(),target)-nums.begin(); }};

2021-05-15 18:21:57 71

原创 leetcode 50.pow(x,n)(快速幂)

比较简单的数论,直接迭代快速幂即可代码:class Solution {public: //这里的int一定要改成long long int不然会卡数值 double myPow(double x, long long int n) { double ans = 1; unsigned long long y; if(n < 0) y = -n; else y..

2021-05-13 21:26:01 70

原创 leetcode 60排列序列

看到题的第一反应当然就是用next_permutation来做,本以为会卡这个函数时间,一次水过了。23333~~~next_permutation这个函数在leetcode也有相关的题目让你写这个函数的实现方法。传送门:leetcode-31下一个排列代码如下:class Solution {public: string getPermutation(int n, int k) { int a[12]; for(int i = 0;i<n...

2021-05-13 21:05:46 164

原创 leetcode 螺旋矩阵(模拟)

因为要对矩阵中的所有元素进行遍历,所以时间复杂度为O(n*m)代码:class Solution {public: vector<int> spiralOrder(vector<vector<int>>& M) { vector<int> ans; if(M.size()==0) return ans; int m = M.size()-1; ...

2021-05-13 17:58:24 111

原创 lintcode 三数之和(双指针)法

题目链接:三数之和因为要求使a+b+c=0的三元组,因此先将数组s进行排序sort(A.begin(),A.end());又因为不能使结果包含重复的三元组,所以定义一个set判断此三元组是否在之前出现过//用于接收和=0的三元组pair<pair<int,int>,int> x;//储存三元组set<pair<pair<int,int>>> mp;之后定义left,right,让left=i+1,righ...

2021-05-12 17:04:51 161

原创 leetcode 盛水最多的容器(双指针法)

看到这道题之后的第一个想法就是暴力,你有你的双指针我有我的两个for当然结果是显而易见的超时了。暴力超时法: int len = height.size()-1; int ans = 0; for(int i = 0;i<=len;i++) { for(int j = i+1;j<=len;j++) { //获取i和j坐标的最小值之后用i与j..

2021-05-08 20:06:04 108

原创 leetcode-4.寻找正序数组的中位数

解法:题目要求挑战log(m+n)的时间复杂度,不过不会,写出了比log(m+n)慢一点不过比一般方法快点的复杂度代码大概为O(n)class Solution {public: double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { //使用insert将两个数组合并在一起 nums1.insert(nums1.end(),n..

2021-05-08 17:01:00 87

原创 Leetcode——3无重复字符的最长子串。

给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: s = "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: s = "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: s = "pwwkew"输出: 3解释: 因为无重复字符的最长子串是"wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke"...

2021-05-08 16:49:46 154

原创 方格取数(多线程dp)(笔记用)

题目描述链接:https://ac.nowcoder.com/acm/problem/16759设有N*N的方格图(N ≤ 10,我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0。如下图所示(见样例):某人从图的左上角的A 点出发,可以向下行走,也可以向右走,直到到达右下角的B点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。此人从A点到B 点共走两次,试找出2条这样的路径,使得取得的数之和为最大。输入描述:输入的第一行为一个整数N(表示N*N的

2021-05-06 20:07:06 114

原创 二叉树的建立与先序输出、求树的深度。

算法步骤:读入字符串如果为'#'则表明此二叉树为空树。否则申请一个空间,将ch的值给bt->data。递归创建左子树,右子树。输入之前应先将二叉树补全即:创建二叉树:void creat_binary(BT &bt){ //先序创建二叉树 char ch; cin >> ch; if (ch == '#') //如果ch==#则bt为空树 bt = NULL; else { bt = new binary_tree; bt-&

2021-04-26 21:10:26 723

原创 洛谷P1629 邮递员送信(最短路径)

题目描述:有一个邮递员要送东西,邮局在节点1。他总共要送n−1样东西,其目的地分别是节点2到节点n。由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有m条道路。这个邮递员每次只能带一样东西,并且运送每件物品过后必须返回邮局。求送完这n−1样东西并且最终回到邮局最少需要的时间。输入格式:第一行包括两个整数,nn和mm,表示城市的节点数量和道路数量。第二行到第(m+1)(m+1)行,每行三个整数,u,v,wu,v,w,表示从uu到vv有一条通过时间为...

2021-04-26 17:07:32 2127

原创 哈夫曼树创建(C++)笔记

算法步骤①:初始化:首先动态分配申请2n个单元:然后循环2n-1次从1号单元开始,依次将1☞2n-1所有单元中的双亲、左孩子、右孩子的下标都初始化为0;最后再循环n次,输入前n个单元中所有叶子节点的权值。②创建树:循环n-1次,通过n-1次的选择、删除与合并来创建哈夫曼树。选择是从当前森林中选择双亲为0且权值最小的两个树根节点s1和s2的权值和作为一个新节点的权值依次存入到数组的第n+1之后的单元中同时记录这个新结点做孩子的下标为s1,右孩子的结点下标为s2.哈夫曼树的创建://.

2021-04-26 16:34:37 2017 1

原创 坐标型动态规划(最大值)

题目描述: 小豆队决定在城镇中找礼物,她们有一张m*n的地图,上面记录了该点礼物的价值或者该点是否是墙壁,如果该点是墙壁,那么将无法通行。小豆队从左上角出发,因为有热可可在后面跟踪,所以小豆队无法回头(即她们只能向下或者右移动),请输出小豆队所能找到的礼物的最大价值。输入描述:第一行输入m,n代表一个m行n列的地图(1 <= m, n <= 10)然后m行每行以空格为分割输入n个字符代表礼物的价值k(0 <= k < 10)或者墙壁-1输出描述:输出所能...

2021-04-22 20:18:05 418

原创 蓝桥杯——平面切分

题目描述平面上有N条直线,其中第i条直线是 y=Ai​*x+Bi​。请计算这些直线将平面分成了几个部分。题目链接:第一个有时提交会显示系统错误,建议使用第二个链接。平面切分平面切分输入描述第一行包含一个整数N。以下NN行,每行包含两个整数Ai​,Bi​。其中,1≤N≤1000,−10^5≤Ai​,Bi​≤10^5。输出描述一个整数代表答案。输入输出样例示例输入31 12 23 3输出6分析这道题,...

2021-04-15 21:46:51 855

原创 蓝桥杯——数字三角形

题目描述:上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右 边的那个数。此外,向左下走的次数与向右下走的次数相差不能超过 1。输入描述输入的第一行包含一个整数N(1≤N≤100),表示三角形的行数。下面的N行给出数字三角形。数字三角形上的数都是 0 至 100 之间的整数。输出描述输出一个整数,表示答案。输入输...

2021-04-12 20:17:06 248

原创 单链表的基本操作(C++链表实现)

[问题描述]实现带头结点的单链表的建立、求长度,取元素、修改元素、插入、删除等单链表的基本操作。[基本要求](1)依次从键盘读入数据,建立带头结点的单链表; (2)输出单链表中的数据元素(3)求单链表的长度;(4)根据指定条件能够取元素和修改元素;(5)实现在指定位置插入和删除元素的功能1、初始化链表输入0停止输入:void init(LinkList &L){ LinkList p = new LNode; L = new LNode; L-&gt..

2021-04-10 16:41:04 3408

原创 多项式相加(C++)链表实现

[问题描述]设计一个算法,以实现一元稀疏多项式的加法运算。[基本要求](1)输入并建立多项式;(2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,……,cn,en,其中n是多项式的项数,ci和ei分别是第i项的系数和指数,序列按指数降序排列;(3)多项式a和b相加,建立多项式a+b。实现代码:#include<iostream>using namespace std;typedef struct LNode{ int ci; int .

2021-04-10 16:14:00 484

原创 约瑟夫环(C++循环链表)实现

[问题描述]约瑟夫(Joseph)问题的一种描述是:编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。试设计一个程序求出出列顺序。令m的初始值为20分析:这道题使用链表做的话可以很容易想到循环链表,接下来构造循环链表并解决问题。1、首先我们应该先创建一个链

2021-04-07 20:42:22 5228

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除